Tengo esta función recursiva de cola aquí:
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 hasta n=997
, luego simplemente se rompe y escupe a RecursionError: maximum recursion depth exceeded in comparison
. ¿Es esto solo un desbordamiento de pila? ¿Hay alguna forma de evitarlo?
line <n>, in <module>
trazas en la pila) y este código toma 2 cuadros de pila n=1
(porque el caso base es n < 1
, por n=1
lo que aún se repite). Y supongo que el límite de recursión no es inclusivo, ya que en "error cuando alcanza 1000" no "error si excede 1000 (1001)". 997 + 2
es inferior a 1000, por lo 998 + 2
que no funciona porque llega al límite.
recursive_function(997)
funciona, se rompe a las 998
. Cuando lo llama recursive_function(998)
, usa 999 marcos de pila y el intérprete agrega 1 marco (porque su código siempre se ejecuta como si fuera parte del módulo de nivel superior), lo que hace que llegue al límite de 1000.