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
Michael Zippo
01.11.2021
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 " profundidad máxima de recursividad excedida en comparaciòn " 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:
Un escenario de ejemplo
Vamos a " 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 :
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:
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:
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:
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 " 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!