यहां हम देखेंगे कि टेल रिकर्सन क्या है। टेल रिकर्सन मूल रूप से रिकर्सिव फ़ंक्शन को फ़ंक्शन के अंतिम स्टेटमेंट के रूप में उपयोग करना है। तो जब रिकर्सिव कॉल से वापस आने के बाद करने के लिए कुछ नहीं बचता, तो उसे टेल रिकर्सन कहा जाता है। हम टेल रिकर्सन का एक उदाहरण देखेंगे।
उदाहरण
#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
टेल रिकर्सन नॉन-टेल रिकर्सन से बेहतर है। चूंकि रिकर्सिव कॉल के बाद कोई कार्य नहीं बचता, इसलिए कंपाइलर के लिए कोड को ऑप्टिमाइज़ करना आसान होगा। जब एक फ़ंक्शन कॉल किया जाता है, तो उसका एड्रेस स्टैक के अंदर स्टोर होता है। तो अगर यह टेल रिकर्सन है, तो एड्रेस को स्टैक में स्टोर करने की आवश्यकता नहीं होती।
हम रिकर्सन का उपयोग करके फैक्टोरियल का उपयोग कर सकते हैं, लेकिन फ़ंक्शन टेल रिकर्सिव नहीं है। 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); }