J'ai cette fonction récursive de queue ici:
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))
Ça marche n=997
, puis ça casse et crache a RecursionError: maximum recursion depth exceeded in comparison
. Est-ce juste un débordement de pile? Y a-t-il un moyen de le contourner?
line <n>, in <module>
traces dans la pile) et ce code prend 2 cadres de pile pour n=1
(parce que le cas de base l'est n < 1
, donc n=1
il revient toujours). Et je suppose que la limite de récursivité n'est pas inclusive, comme dans son "erreur lorsque vous frappez 1000" et non "erreur si vous dépassez 1000 (1001)". 997 + 2
est inférieur à 1000, donc cela 998 + 2
ne fonctionne pas car il atteint la limite.
recursive_function(997)
ça marche, ça casse 998
. Lorsque vous l'appelez, recursive_function(998)
il utilise 999 cadres de pile et 1 cadre est ajouté par l'interpréteur (car votre code est toujours exécuté comme s'il faisait partie du module de niveau supérieur), ce qui le fait atteindre la limite de 1000.