सीधे शब्दों में कहा जाए तो टेल रिकर्सन एक रिकर्सन है, जहां कंपाइलर रिकॉर्सिव कॉल को "गोटो" कमांड से बदल सकता है, इसलिए संकलित संस्करण को स्टैक डेप्थ को बढ़ाना नहीं होगा।
कभी-कभी एक पूंछ-पुनरावर्ती फ़ंक्शन को डिज़ाइन करने के लिए आपको अतिरिक्त मापदंडों के साथ एक सहायक फ़ंक्शन बनाने की आवश्यकता होती है।
उदाहरण के लिए, यह है नहीं एक पूंछ पुनरावर्ती समारोह:
int factorial(int x) {
if (x > 0) {
return x * factorial(x - 1);
}
return 1;
}
लेकिन यह एक पूंछ-पुनरावर्ती कार्य है:
int factorial(int x) {
return tailfactorial(x, 1);
}
int tailfactorial(int x, int multiplier) {
if (x > 0) {
return tailfactorial(x - 1, x * multiplier);
}
return multiplier;
}
क्योंकि कंपाइलर एक गैर-पुनरावर्ती के लिए पुनरावर्ती कार्य को फिर से लिख सकता है, इस तरह से कुछ का उपयोग कर (एक छद्मकोड):
int tailfactorial(int x, int multiplier) {
start:
if (x > 0) {
multiplier = x * multiplier;
x--;
goto start;
}
return multiplier;
}
संकलक के लिए नियम बहुत सरल है: जब आप " return thisfunction(newparameters);
" पाते हैं , तो इसे " parameters = newparameters; goto start;
" से बदल दें । लेकिन यह केवल तभी किया जा सकता है जब पुनरावर्ती कॉल द्वारा वापस किया गया मान सीधे लौटाया जाए।
यदि किसी फ़ंक्शन में सभी पुनरावर्ती कॉल को इस तरह बदला जा सकता है, तो यह एक पूंछ-पुनरावर्ती कार्य है।