error de recursión se excedió la profundidad máxima de recursividad al llamar a un objeto de Python

Funciones y métodos de Python

Funciones recursivas , sin límites, podrían autodenominarse indefinidamente. Si escribe una función recursiva que se ejecuta en un cierto número de iteraciones, encontrará la & ldquo; profundidad máxima de recursividad excedida en comparación & rdquo;  Error de Python .

Esta guía explica qué significa este error y por qué es importante. Veremos un ejemplo de este error para que pueda aprender cómo solucionarlo en su programa.




Se superó la profundidad de recursividad máxima en comparación

Las funciones recursivas son funciones que se llaman a sí mismas para encuentre una solución para un programa.

Las funciones recursivas bien escritas incluyen límites para asegurar que no se ejecuten infinitamente. Esto puede significar que una función solo debe ejecutarse hasta que se cumpla una condición particular.

Si escribe una función recursiva que ejecuta más de un número particular de iteraciones (generalmente 997), verá un error cuando llega a la siguiente iteración.

Esto se debe a que Python limita la profundidad de un algoritmo de recursividad. Esto se refiere a cuántas veces la función puede llamarse a sí misma.

Puede ver el límite de recursividad en su shell de Python usando este código:

 import sys print (sys.getrecursionlimit ()) 



Un escenario de ejemplo

Vamos a & rsquo; s escribir una función recursiva que calcule un número en la secuencia de Fibonacci. En la secuencia de Fibonacci, el siguiente número de la secuencia es la suma de los dos últimos números. Los dos primeros números de la secuencia son 0 y 1.

El 81% de los participantes afirmaron que se sentían más seguros de sus perspectivas laborales después de asistir a un bootcamp. Asóciese a un bootcamp hoy.

El graduado promedio de bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Aquí hay una función recursiva que calcula la secuencia de Fibonacci :

 def fibonacci (n): if n & lt; = 1: return n else: return (fibonacci (n-1) + fibonacci (n-2)) 

Si el el número que especificamos es menor o igual a 1, se devuelve ese número . De lo contrario, nuestro programa calcula el siguiente número en la secuencia.


A continuación, vamos a llamar a nuestra función :

print (fibonacci (5000))

Este código calcula el número después del número 5000 en la secuencia de Fibonacci. Ejecutemos nuestro código y veamos qué sucede:

 Traceback (última llamada más reciente): Archivo "main.py", línea 7, en & lt; módulo & gt; print (recur_fibo (5000)) Archivo "main.py", línea 5, en recur_fibo return (recur_fibo (n-1) + recur_fibo (n-2)) & hellip; Archivo "main.py", línea 2, en recur_fibo si n & lt; = 1: RecursionError: se superó la profundidad de recursividad máxima en comparación 

Nuestro código devuelve un mensaje de error largo. Este mensaje se ha abreviado para mayor brevedad.




La solución

Python ha generado un error de recursividad para protegernos contra un desbordamiento de pila. T Esto es cuando el puntero en una pila excede el límite de la pila. Sin este error, nuestro programa intentaría utilizar más espacio de memoria del que estaba disponible.

Podemos corregir este error haciendo que nuestra secuencia sea iterativa o aumentando el límite de recursividad en nuestro programa.

Solución # 1: Use un algoritmo iterativo

Podemos cambiar nuestro programa para usar un enfoque iterativo en su lugar de un enfoque recursivo:

 to_calculate = 5 i = 0 next = 1 current = 1 last = 0 mientras que i & lt; to_calculate: siguiente = actual + último actual = último último = siguiente i + = 1 

Este código calcula los primeros cinco números en la secuencia de Fibonacci. Podríamos aumentar la cantidad de valores que calculamos, pero eso también aumentaría el tiempo que tarda nuestro programa en ejecutarse. Nuestro programa devuelve:

1

1

2

3

5

Este enfoque evita el error de recursividad porque no usamos funciones recursivas. En su lugar, usamos un ciclo while para calcular el siguiente número en la lista.

Solución # 2: Aumentar el límite de recursividad

Puede anular el límite de recursión predeterminado que establece Python usando setrecursionlimit ( ) método:

 import sys sys.setrecursionlimit (5000) 

Este código establece la profundidad máxima de recursividad en 5,000. Debes tener cuidado cuando uses este método porque puede causar un desbordamiento de pila dependiendo de los recursos disponibles para el intérprete de Python.

"Career Karma entró en mi vida cuando más lo necesitaba y ayudé rápidamente coincida con un bootcamp. Dos meses después de graduarme, encontré el trabajo de mis sueños que se alineaba con mis valores y objetivos en la vida. "

Venus, ingeniero de software en Rockbot

En general, es mejor reescribir una función para utilizar un enfoque iterativo en lugar de aumentar el límite de recursividad.




Conclusión

La & ldquo; recursividad máxima profundidad excedida en comparación y rdquo; Se genera un error cuando intenta ejecutar una función que excede el límite de recursividad integrado de Python. Puede corregir este error reescribiendo su programa para usar un enfoque iterativo o aumentando el límite de recursividad en Python.

¡Ahora tiene el conocimiento que necesita para corregir este error como un profesional!





error de recursión se excedió la profundidad máxima de recursividad al llamar a un objeto de Python: StackOverflow Questions

Tutorials