এখানে আমরা দেখব টেইল রিকার্সন কী। টেইল রিকার্সন হল মূলত রিকার্সিভ ফাংশনকে ফাংশনের লাস্ট স্টেটমেন্ট হিসেবে ব্যবহার করা। তাই যখন রিকার্সিভ কল থেকে ফেরার পর কিছু করার থাকে না, সেটাকে টেইল রিকার্সন বলা হয়। আমরা টেইল রিকার্সনের একটি উদাহরণ দেখব।
উদাহরণ
#includeusing namespace std; void printN(int n) { if(n < 0) { return; } cout << n << " "; printN(n - 1); } int main() { printN(10); }
আউটপুট
10 9 8 7 6 5 4 3 2 1 0
টেইল রিকার্সন নন-টেইল রিকার্সনের চেয়ে ভালো। কারণ রিকার্সিভ কলের পরে কোনো টাস্ক বাকি না থাকায়, কম্পাইলার কোড অপ্টিমাইজ করতে সহজ পায়। এক ফাংশন কল হলে তার অ্যাড্রেস স্টোর হয় স্ট্যাকে। তাই যদি টেইল রিকার্সন হয়, তবে স্ট্যাকে অ্যাড্রেস স্টোর করার প্রয়োজন নেই।
আমরা ফ্যাক্টোরিয়াল রিকার্সন দিয়ে করতে পারি, কিন্তু ফাংশনটি টেইল রিকার্সিভ নয়। fact(n-1) এর মান fact(n)-এর ভিতরে ব্যবহৃত হয়।
long fact(int n) {
if(n <= 1)
return 1;
n * fact(n-1);
}
একে টেইল রিকার্সিভ বানাতে পারি কিছু এক্সট্রা প্যারামিটার যোগ করে। নিচের মত -
long fact(long n, long a) {
if(n == 0)
return a;
return fact(n-1, a*n);
}