Eu tenho essa função recursiva da cauda aqui:
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))
Funciona até n=997
, então apenas quebra e cospe a RecursionError: maximum recursion depth exceeded in comparison
. Isso é apenas um estouro de pilha? Existe uma maneira de contornar isso?
line <n>, in <module>
rastreamentos na pilha) e esse código leva 2 quadros de pilha para n=1
(porque o caso base é n < 1
, portanto n=1
ainda é recorrente). E acho que o limite de recursão não é inclusivo, como no erro "erro ao atingir 1000" não "se você exceder 1000 (1001)". 997 + 2
é menor que 1000, portanto, 998 + 2
não funciona porque atinge o limite.
recursive_function(997)
funciona, quebra em 998
. Quando você chama, recursive_function(998)
ele usa 999 quadros de pilha e 1 quadro é adicionado pelo intérprete (porque seu código é sempre executado como se fosse parte do módulo de nível superior), o que faz com que atinja o limite de 1000.