मान लीजिए कि मैं एक गहराई पहले खोज का उपयोग पार करने के लिए एक पेड़ है, और इसे traversing के लिए मेरे एल्गोरिथ्म कुछ इस तरह दिखता है: कई भाषाओं में अबएक स्टैक का उपयोग करने के लिए एक रिकर्सिव फ़ंक्शन को कैसे परिवर्तित करें?
algorithm search(NODE):
doSomethingWith(NODE)
for each node CHILD connected to NODE:
search(CHILD)
वहाँ उदाहरण है अगर के लिए प्रत्यावर्तन के लिए अधिकतम गहराई है, रिकर्सन की गहराई एक निश्चित सीमा से अधिक है, तो प्रक्रिया एक ढेर ओवरफ्लो के साथ दुर्घटनाग्रस्त हो जाएगी।
इस समारोह को रिकर्सन के बिना कैसे लागू किया जा सकता है, और इसके बजाय एक ढेर के साथ? कई मामलों में, बहुत सारे स्थानीय चर हैं; वे कहाँ से संग्रहीत किया जा सकता है?
मुझे यह प्रश्न इस तथ्य के कारण अनजाने विनोद का एक छोटा सा तत्व प्राप्त करने के लिए मिलता है कि अधिकांश प्रोग्रामिंग भाषाएं (हालांकि सभी नहीं) इसके लिए आंतरिक रूप से एक स्टैक का उपयोग करती हैं। बेशक, यह भी तथ्य है कि अधिकांश भाषाओं के लिए, गहराई से पहली बार खोज के साथ रिकर्सन सीमा को हिट करने के लिए आपको एक बेहद असंतुलित पेड़ या बहुत बहुत बड़ा होना चाहिए, इस पर विचार करते हुए कि आपको इसकी गहराई की आवश्यकता होगी लगभग 1000 और सबसे अधिक कहते हैं, संतुलित द्विआधारी पेड़ों में 2^गहराई -1 के बराबर कई तत्व होते हैं, जिसका अर्थ है, उस पेड़ के लिए, आपको अतिप्रवाह से पहले 2^1000 - 1 तत्वों की आवश्यकता होगी। – JAB
और, ज़ाहिर है, चूंकि एक भाषा किसी भी तरह के दृश्यों को पीछे छोड़ने के लिए एक ढेर का उपयोग कर सकती है, वैसे भी जो भी रिकर्सिव फॉर्म में ओवरफ्लो उत्पन्न कर रहा है, स्पष्ट रूप से उपयोग करने वाले-ए-स्टैक संस्करण के साथ भी समस्या हो सकती है। (मुझे नहीं लगता कि यह एक बुरा सवाल है, हालांकि; मैं इस समय थोड़ा सा महसूस कर रहा हूं और एक जुआ मूड में हूं।) – JAB
वास्तव में मेरा पेड़ बहुत बड़ा है, हालांकि समान नोड्स की बड़ी संख्या। तो समान नोड्स हैश टेबल में कैश किए जाते हैं लेकिन पेड़ फिर भी बहुत बड़ा होता है। – Ran