पूंछ पुनरावृत्ति क्या है?

कंप्यूटर प्रोग्रामिंग में, पूंछ पुनरावृत्ति एक पुनरावर्ती कार्य करने के लिए एक पूंछ कॉल का उपयोग है। टेल कॉल तब होती है जब किसी फ़ंक्शन को दूसरे फ़ंक्शन के अंतिम कार्य के रूप में कहा जाता है। उदाहरण के लिए, इस जावास्क्रिप्ट प्रोग्राम में:

 var myTailFunc = function (myVar) {return myVar; }; var myFunc = function (myVar) {वापसी myTailFunc (myVar); }; 

यहाँ, myTailFunc (myVar) पर कॉल एक टेल कॉल है क्योंकि यह myFunc (myVar) का अंतिम ऑपरेशन है। जब कंपाइलर देखता है कि यह myFunc का अंतिम ऑपरेशन है, तो यह एक छोटा अनुकूलन कर सकता है। अनिवार्य रूप से, इसे स्टैक पर रिटर्न एड्रेस को पुश करने की आवश्यकता नहीं है, क्योंकि इसे myFunc पर लौटने की आवश्यकता नहीं होगी। यह myFailc के रिटर्न मान के रूप में myTailFunc का रिटर्न मान वापस कर सकता है

पुनरावर्ती फ़ंक्शन में उपयोग किए जाने पर यह छोटा अनुकूलन अधिक महत्वपूर्ण हो जाता है। आम तौर पर, पुनरावृत्ति के प्रत्येक स्तर को स्टैक पर धकेलने के लिए अतिरिक्त रिटर्न पते की आवश्यकता होती है। पूंछ पुनरावृत्ति यह अनावश्यक बनाता है।

यहाँ एक सरल जावास्क्रिप्ट फैक्टरियल फ़ंक्शन का एक उदाहरण दिया गया है जो पहले बिना लिखा गया है, और फिर पूंछ पुनरावृत्ति के साथ।

पूंछ पुनरावृत्ति के बिना फैक्टरियल फ़ंक्शन

 var factorial = function (n) {if (n == 0) {return 1; } और {वापसी n * factorial (एन - 1); }}; 

यह कार्य पुनरावर्ती है, लेकिन पुनरावर्ती नहीं है। फ़ंक्शन की अंतिम प्रक्रिया गुणन ऑपरेशन (" * ") है, इसलिए पुनरावृत्ति को हमेशा कॉलिंग फ़ंक्शन पर लौटने की आवश्यकता होगी।

पूंछ पुनरावृत्ति के साथ फैक्टरियल फ़ंक्शन

 var factorial = function (n) {var recursion = function (n, subTotal) {if (n == 0) {return subTotal; } और {वापसी पुनरावर्तन (n - 1, n * सबटोटल); }}; वापसी की पुनरावृत्ति (एन, 1); }; 

समारोह, प्रोग्रामिंग शर्तें