2011-02-09 7 views
5

में टेल रिकर्सन बनाम फॉरवर्ड रिकर्सन एरलांग में परफॉर्मेंस के लिए आगे की रिकर्सन की तुलना में पूंछ रिकर्सन बेहतर है?
या erlang संकलक आगे भी रिकर्सन अनुकूलित करता है?
मेरा मतलब है, आगे की रिकर्सन के बजाय पूंछ रिकर्सन का उपयोग करने के कोई कारण हैं?
मेरी राय में, आगे की पुनरावृत्ति अधिक सुंदर दिखती है।एरलंग

उत्तर

3

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

उदाहरण के लिए, यदि किसी फ़ंक्शन का रिटर्न वैल्यू किसी अन्य फ़ंक्शन पर कॉल है, तो मध्यस्थ कार्य को ढेर पर रखने की आवश्यकता नहीं है। तो कोड सीधे कॉलर को आंतरिक फ़ंक्शन से वापस कूदता है।

गैर-पूंछ रिकर्सन को एरलैंग कंपाइलर द्वारा कुछ मामलों में पूंछ रिकर्सन के लिए अनुकूलित किया गया है, लेकिन इस पर भरोसा न करें। जब भी आप कर सकते हैं पूंछ रिकर्सिव कार्यों को कोड करने के लिए यह एक अच्छी आदत बनाओ।

10

पूंछ रिकर्सन और आगे रिकर्सन पूरी तरह से अलग अवधारणाएं हैं। यह discussion देखें।

पूंछ रिकर्सिव है, और इस प्रकार अनुकूलित किया गया एक आगे की पुनरावृत्ति लिखना संभव है। एक आगे की पुनरावृत्ति लिखना भी संभव है जो कि पूंछ नहीं है: इस मामले में, इसे अनुकूलित नहीं किया जाएगा, यानी यह स्टैक स्पेस का उपभोग करेगा।

संबंधित मुद्दे