C Primer Plus (6th edition) में, यह इस तरह से tail recursion concept परिभाषित करता है:पूंछ प्रत्यावर्तन कॉल (सी प्राइमर प्लस किताब उदाहरण)
प्रत्यावर्तन का सरलतम रूप में, पुनरावर्ती कॉल समारोह के अंत में है, वापसी बयान से ठीक पहले। इसे पूंछ रिकर्सन, या एंड रिकर्सन कहा जाता है, क्योंकि रिकर्सिव कॉल अंत में आता है। पूंछ रिकर्सन सबसे सरल रूप है क्योंकि यह लूप की तरह कार्य करता है।
और यह एक पूंछ पुनरावर्ती ढंग से भाज्य की गणना का एक उदाहरण देता है:
नोट:
long rfact(int n) { long ans; if (n > 0) ans = n * rfact(n - 1); else ans = 1; return ans; }
यह भी एक पक्ष टिप्पणी है, जो मेरी राय में सही नहीं है बनाता है हालांकि हालांकि rfact() के लिए रिकर्सिव कॉल फ़ंक्शन में आखिरी पंक्ति नहीं है, यह अंतिम विवरण है जिसे n> 0 पर निष्पादित किया गया है, इसलिए यह पूंछ रिकर्सन है।
एक स्पष्ट रूप से देख सकते हैं कि पिछले बयान n * rfact(n - 1)
जो, अगर आप रिकर्सिवली का विस्तार, यह आस्थगित गुणा की एक श्रृंखला के लिए नेतृत्व करेंगे है। प्रक्रिया प्रकृति में पुनरावर्ती है, इसलिए कार्यान्वयन here वर्णित अनुसार पूंछ रिकर्सिव नहीं हो सकता है।
उदाहरण भ्रामक है। आप की राय क्या है?
को संकलक द्वारा अनुकूलन किया जा सकता है उदाहरण के बहुत टूक पूंछ पुनरावर्ती नहीं है। – molbdnilo
यह वह पुस्तक है जिसका उपयोग मैं सी प्रोग्रामिंग भाषा सीखने के लिए करता हूं। क्या किसी को पता है कि यह एक अच्छी किताब है? – Alex
वह पुस्तक गलत है। एक पूंछ कॉल तब होती है जब 'वापसी' का तर्क एक फ़ंक्शन कॉल होता है। और पूंछ रिकर्सन तब होता है जब वह फ़ंक्शन कॉल एक ही फ़ंक्शन पर होता है। – Barmar