मेरे पास यहाँ यह पुनरावर्ती कार्य है:
def recursive_function(n, sum):
if n < 1:
return sum
else:
return recursive_function(n-1, sum+n)
c = 998
print(recursive_function(c, 0))
यह काम करता है n=997, तो यह बस टूट जाता है और बाहर थूकता है RecursionError: maximum recursion depth exceeded in comparison। यह सिर्फ एक ढेर अतिप्रवाह है? क्या इसके आसपास पाने का कोई तरीका है?
line <n>, in <module>स्टैक निशान में) जोड़ता है और इस कोड के लिए 2 स्टैक फ्रेम लेता है n=1(क्योंकि आधार मामला है n < 1, इसलिए इसके लिए n=1अभी भी पुनरावृत्ति होती है)। और मुझे लगता है कि पुनरावृत्ति सीमा समावेशी नहीं है, क्योंकि यह "त्रुटि है जब आप 1000 हिट करते हैं" नहीं "त्रुटि यदि आप 1000 (1001) से अधिक है"। 997 + 2यह 1000 से कम है इसलिए यह काम 998 + 2नहीं करता है क्योंकि यह सीमा को हिट करता है।
recursive_function(997)काम करता है, यह टूट जाता है 998। जब आप कॉल करते हैं तो recursive_function(998)यह 999 स्टैक फ्रेम का उपयोग करता है और 1 फ्रेम दुभाषिया द्वारा जोड़ा जाता है (क्योंकि आपका कोड हमेशा चलाया जाता है जैसे कि यह शीर्ष स्तर मॉड्यूल का हिस्सा है), जो इसे 1000 की सीमा तक हिट करता है।