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=1wciąż 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 + 2jest 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.