Mam tutaj tę funkcję rekurencyjną:
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))
Działa to n=997
, a potem po prostu pęka i wypluwa RecursionError: maximum recursion depth exceeded in comparison
. Czy to tylko przepełnienie stosu? Czy można to obejść?
line <n>, in <module>
ślady w stosie), a ten kod przyjmuje 2 ramki stosu n=1
(ponieważ tak jest ze względu na przypadek podstawowy n < 1
, więc n=1
wciąż się powtarza). I myślę, że limit rekurencji nie jest wliczony, ponieważ jest to „błąd, gdy trafisz 1000”, „nie” błąd, jeśli przekroczysz 1000 (1001) ”. 997 + 2
jest mniejsza niż 1000, więc nie działa 998 + 2
, ponieważ osiąga limit.
recursive_function(997)
działa, psuje się 998
. Podczas wywołania recursive_function(998)
używa 999 ramek stosu, a interpreter dodaje 1 ramkę (ponieważ kod jest zawsze uruchamiany tak, jakby był częścią modułu najwyższego poziomu), co powoduje, że osiąga limit 1000.