এখানে আমরা টেইল রিকারশন কি তা দেখব। টেল রিকারসন মূলত রিকারসিভ ফাংশনকে ফাংশনের শেষ স্টেটমেন্ট হিসেবে ব্যবহার করে। তাই রিকারসিভ কল থেকে ফিরে আসার পর যখন কিছুই করার থাকে না, তাকে বলে টেইল রিকারসন। আমরা লেজের পুনরাবৃত্তির একটি উদাহরণ দেখতে পাব।
উদাহরণ
#include <iostream> using 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
টেল রিকারসন নন-টেইল রিকারশনের চেয়ে ভালো। রিকার্সিভ কলের পর যেহেতু কোনো কাজ বাকি নেই, তাই কম্পাইলারের পক্ষে কোডটি অপ্টিমাইজ করা সহজ হবে। যখন একটি ফাংশন কল করা হয়, তখন তার ঠিকানা স্ট্যাকের ভিতরে সংরক্ষণ করা হয়। তাই যদি এটি টেল রিকারসন হয়, তাহলে ঠিকানাগুলিকে স্ট্যাকের মধ্যে সংরক্ষণ করার প্রয়োজন নেই৷
৷আমরা রিকার্সন ব্যবহার করে ফ্যাক্টরিয়াল ব্যবহার করতে পারি, কিন্তু ফাংশনটি টেল রিকারসিভ নয়। ফ্যাক্ট(n)-এর ভিতরে ফ্যাক্ট(n-1) এর মান ব্যবহার করা হয়।
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); }