Ich habe diese rekursive Schwanzfunktion hier:
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))
Es funktioniert bis n=997, dann bricht es einfach und spuckt a aus RecursionError: maximum recursion depth exceeded in comparison. Ist das nur ein Stapelüberlauf? Gibt es eine Möglichkeit, das zu umgehen?
line <n>, in <module>In-Stack-Traces) und dieser Code benötigt 2 Stack-Frames n=1(da der Basisfall so ist n < 1, dass n=1er immer noch wiederholt wird). Und ich denke, das Rekursionslimit ist nicht inklusive, wie in "Fehler, wenn Sie 1000 treffen", nicht "Fehler, wenn Sie 1000 (1001) überschreiten". 997 + 2ist weniger als 1000, also funktioniert 998 + 2es nicht, weil es das Limit erreicht.
recursive_function(997)funktioniert, es bricht bei 998. Wenn Sie es aufrufen recursive_function(998), werden 999 Stack-Frames verwendet und 1 Frame wird vom Interpreter hinzugefügt (da Ihr Code immer so ausgeführt wird, als ob er Teil des Top-Level-Moduls ist), wodurch das 1000-Limit erreicht wird.