एक भूलभुलैया समस्या के लिए रिकर्सन का उपयोग करने की कोशिश कर रहा है और एक सशर्त परीक्षण केस बनाया है। क्या कोई मुझे समझा सकता है कि दूसरी शर्त 10 के बजाय 20 बीएस क्यों जोड़ती है?

def recur_test(count, list1, status):
    if count == 10 and status == 1:
        return (count, list1)
    if count == 10 and status == 0:
        count = 0
        status = 1
        recur_test(count, list1, status)

    if count < 10 and status == 0:
        count += 1
        list1.append("a")
        print("A thread", count)
        recur_test(count, list1, status)

    if count < 10 and status == 1:
        count += 1
        list1.append('b')
        print("B Thread", count)
        recur_test(count, list1, status)

print(recur_test(0, [], 0))
-1
ISE8 8 जुलाई 2020, 16:49
एक 'बीएस' क्या है?
 – 
orestisf
8 जुलाई 2020, 16:51
बी एक स्ट्रिंग है जो सूची 1 से जुड़ती है; मैं इसका इस्तेमाल सिर्फ ट्रैक करने के लिए कर रहा था कि क्या हो रहा है
 – 
ISE8
8 जुलाई 2020, 16:53
क्या आपने स्वयं इसका पता लगाने की कोशिश की? उदाहरण के लिए, प्रत्येक कॉल की शुरुआत में पैरामीटर के मान क्या हैं, इसकी जांच करके? आप क्या होने की उम्मीद कर रहे थे, और क्यों?
 – 
Karl Knechtel
8 जुलाई 2020, 16:56
बस स्पष्ट करने के लिए: आपने ने यह कार्य किया है और सोच रहे हैं कि यह जो करता है वह क्यों करता है?
 – 
MisterMiyagi
8 जुलाई 2020, 16:58
1
क्या यह डिबगिंग प्रश्न की परिभाषा नहीं है, यद्यपि? अगर ओपी जानता था कि कोड क्यों टूट रहा था, तो संभवतः उन्हें यहां कोई प्रश्न पोस्ट करने की आवश्यकता नहीं होगी।
 – 
EJoshuaS - Reinstate Monica
8 जुलाई 2020, 17:00

1 उत्तर

आपका यदि कथन सत्य होने पर भी अप्रत्याशित रूप से एक-दूसरे को प्रभावित करता है। जब दूसरी शर्त if count == 10 and status == 0: सत्य है, तो आप गिनती = 0 और स्थिति = 1 सेट करते हैं, फिर पुनरावर्ती कॉल करें। पुनरावर्ती कॉल "बी थ्रेड" के माध्यम से सभी तरह से जाती है और उस स्थान पर नियंत्रण लौटाती है जहां आपने उस सेकंड में रिकर्सिव कॉल किया था यदि शरीर। तो अब गिनती और स्थिति क्रमशः 0 और 1 है। यह अंतिम शर्त if count < 10 and status == 1: को सही बनाता है, इसलिए यह फिर से "बी थ्रेड" के माध्यम से सभी तरह से जाना जारी रखता है।

मैं सुझाव दूंगा कि अगर कथन को और में बदल दिया जाए।

1
siralexsir88 8 जुलाई 2020, 17:06
1
समझा! रन पर जहां गिनती = 10 और स्थिति = 1; मैं 10 बीएस जोड़ने के लिए एक थ्रेड को बार-बार कॉल करता हूं, लेकिन चूंकि मेरे पास नीचे की तरफ एक स्टेटमेंट है, तो इसमें 10 बीएस जोड़ने के लिए पहले से ही एक थ्रेड है, इसलिए 20 बीएस जोड़े गए हैं !!! मुझे अब समझ आया। सारी मदद के लिए सभी का धन्यवाद!
 – 
ISE8
8 जुलाई 2020, 17:15