Ho questa funzione ricorsiva della coda qui:
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))
Funziona fino a n=997
, quindi si rompe e sputa a RecursionError: maximum recursion depth exceeded in comparison
. È solo un overflow dello stack? C'è un modo per aggirarlo?
line <n>, in <module>
tracce in stack) e questo codice prende 2 frame di stack per n=1
(perché il caso base lo è n < 1
, quindi per il n=1
fatto che ricorre ancora). E immagino che il limite di ricorsione non sia inclusivo, come nel suo "errore quando si preme 1000" non "errore se si supera 1000 (1001)". 997 + 2
è inferiore a 1000 quindi non funziona 998 + 2
perché raggiunge il limite.
recursive_function(997)
funziona, si rompe a 998
. Quando lo chiami recursive_function(998)
usa 999 frame stack e 1 frame viene aggiunto dall'interprete (perché il tuo codice viene sempre eseguito come se facesse parte del modulo di livello superiore), il che lo fa raggiungere il limite di 1000.