ฉันมีฟังก์ชั่นวนซ้ำแบบหางนี่:
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
มันยังคงเกิดขึ้นอีก) และฉันเดาว่าการ จำกัด การเรียกซ้ำนั้นไม่รวมอยู่เนื่องจากเป็น "ข้อผิดพลาดเมื่อคุณกด 1,000" ไม่ใช่ "ข้อผิดพลาดหากคุณเกิน 1,000 (1001)" 997 + 2
น้อยกว่า 1,000 จึงใช้งาน998 + 2
ไม่ได้เพราะมันถึงขีด จำกัด แล้ว
recursive_function(997)
ทำงานได้998
ดี เมื่อคุณเรียกrecursive_function(998)
มันจะใช้ 999 stack stack และ 1 frame ถูกเพิ่มโดย interpreter (เพราะโค้ดของคุณจะทำงานเหมือนว่าเป็นส่วนหนึ่งของโมดูลระดับบนสุด) ซึ่งทำให้มันถึงขีด จำกัด 1,000