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=1
er 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 + 2
ist weniger als 1000, also funktioniert 998 + 2
es 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.