मुझे लगता है कि पूंछ कॉल अनुकूलन को केवल की गारंटी की आवश्यकता है जहां रिकर्सन की अनुमानित या आवश्यक है; अर्थात, उन भाषाओं में जो कार्यात्मक प्रोग्रामिंग शैली को प्रोत्साहित या लागू करते हैं। (इस तरह की भाषाओं के साथ, आप पाएंगे कि for
या while
लूप या तो दृढ़ता से निराश हो जाते हैं, जो कि सुरुचिपूर्ण, या शायद भाषा से पूरी तरह से अनुपस्थित हैं, इसलिए आप इन सभी कारणों और शायद अधिक के लिए रिकर्सन का सहारा ले सकते हैं।)
सी प्रोग्रामिंग भाषा (आईएमएचओ) स्पष्ट रूप से को कार्यात्मक प्रोग्रामिंग के साथ दिमाग में डिजाइन किया गया था। सभी प्रकार के लूप संरचनाएं होती हैं जिन्हें आम तौर पर रिकर्सन के पक्ष में उपयोग किया जाता है: for
, do .. while
, while
। ऐसी भाषा में, मानक में पूंछ कॉल अनुकूलन को निर्धारित करने के लिए अधिक समझदारी नहीं होगी, क्योंकि यह कामकाजी कार्यक्रमों की गारंटी के लिए कड़ाई से जरूरी नहीं है।
कंट्रास्ट यह फिर से एक कार्यात्मक प्रोग्रामिंग भाषा while
छोरों नहीं है कि के साथ: इसका मतलब यह है तो आप करेंगे जरूरत प्रत्यावर्तन; जो बदले में है कि भाषा को यह सुनिश्चित करना चाहिए कि, कई पुनरावृत्तियों के साथ, ढेर अतिप्रवाह एक समस्या नहीं बनेंगे; इस प्रकार ऐसी भाषा के लिए आधिकारिक मानक पूंछ कॉल अनुकूलन निर्धारित करना चुन सकता है।
पी.एस .: नोट पूंछ कॉल अनुकूलन के लिए मेरी तर्क में मामूली दोष। अंत में, मैं ढेर अतिप्रवाह का उल्लेख करता हूं। लेकिन कौन कहता है कि फ़ंक्शन कॉल को हमेशा स्टैक की आवश्यकता होती है? कुछ प्लेटफार्मों पर, फ़ंक्शन कॉल को पूरी तरह से अलग तरीके से कार्यान्वित किया जा सकता है, और स्टैक ओवरफ़्लो कभी भी समस्या नहीं होगी। एक मानक में पूंछ कॉल अनुकूलन निर्धारित करने के खिलाफ यह एक और तर्क होगा। (लेकिन मुझे गलत मत समझो, मैं इस तरह के अनुकूलन की योग्यता देख सकता हूं, यहां तक कि ढेर के बिना भी!)
संबंधित: http://stackoverflow.com/questions/2250727/regarding-stack-reuse-of-a-function-calling-itself –