मैं पूरी तरह से पाइथन और रिकर्सिव फ़ंक्शंस के लिए बिल्कुल नया हूं, इसलिए मेरी अज्ञानता को क्षमा करें।पायथन रिकर्सन और रिटर्न स्टेटमेंट
मैं अजगर में एक द्विआधारी खोज वृक्ष को लागू करने और निम्नलिखित डालने विधि (एक वर्ग से बाहर ले जाया) के लिए कोशिश कर रहा हूँ:
def insert(self, key, root=None):
'''Inserts a node in the tree'''
if root == None:
root = self.root
if root.key == None:
self._update(root, key)
return 0
else:
tmp = root
if key > tmp.key: # we work with the right subtree
self.insert(key, root=tmp.right)
elif key < tmp.key: # we work with the left subtree
self.insert(key, root=tmp.left)
else: # key already exists
return 0
मुझे यकीन है कि अगर यह सुपाठ्य है नहीं कर रहा हूँ, लेकिन इसे ट्रावर्स पेड़ जब तक यह किसी भी मूल्य के लिए नहीं मिलता है और डालने के लिए कुंजी के साथ नोड अद्यतन करता है।
अब, विधि अच्छी तरह से काम करती है और सही ढंग से स्क्रैच से बीएसटी बनाती है। लेकिन रिटर्न स्टेटमेंट में कोई समस्या है, क्योंकि अगर कोई रिकर्सन नहीं किया जाता है तो यह केवल 0 लौटाता है।
>>> bst.insert(10)
0
>>> bst.insert(15)
>>> bst.root.right.key
15
>>>
रूट कुंजी "डालने" फिर से 0 (लाइन 15 से) को वापस लौटाता है।
>>> bst.insert(10)
0
मुझे यह नहीं पता कि ऐसा क्यों होता है। अगर मैं लाइन 6 में एक प्रिंट स्टेटमेंट डालता हूं, तो यह सही तरीके से निष्पादित होता है, फिर भी यह पहले सम्मिलन से पहले कुछ भी वापस नहीं करेगा। ऐसा क्यों है?
आपकी मदद के लिए धन्यवाद (मैं यकीन है कि मैं कुछ बुनियादी अजगर और प्रत्यावर्तन के बारे में जानकारी याद कर रहा हूँ कर रहा हूँ),
इवान
पुनश्च: मैं पढ़ा है कि प्रत्यावर्तन का सबसे अच्छा तरीका नहीं है एक बीएसटी लागू करें, इसलिए मैं अन्य समाधानों को देखूंगा, लेकिन आगे बढ़ने से पहले मैं इसका जवाब जानना चाहता हूं।
मुझे यकीन नहीं है कि आपको क्या लगता है कि इसे वापस करना चाहिए, 0 से भी कम। क्या आप दिखा सकते हैं कि आप क्या उम्मीद कर रहे हैं? –
@imiric: मुझे लगता है कि आपको दूसरों से कुछ सहायक पॉइंटर्स मिल गए हैं, लेकिन मैं यह भी इंगित करना चाहूंगा कि वापसी की स्थिति छोड़ने के लिए आपकी प्रवीणता आपको सुझाव दे सकती है कि आप बयानों के बजाय अभिव्यक्तियों में सोचें। यदि ऐसा है, तो शायद योजना जैसी एक भाषा आपको अनुकूल करेगी। आपको निश्चित रूप से पायथन पर छोड़ना नहीं है, लेकिन अपने दिमाग को कार्यात्मक प्रोग्रामिंग भाषाओं में खोलें।ZoP से उद्धरण के लिए –