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