Python Recursion (función recursiva)

En este tutorial, aprenderá a crear una función recursiva (una función que se llama a sí misma).

¿Qué es la recursividad?

La recursividad es el proceso de definir algo en términos de sí mismo.

Un ejemplo del mundo físico sería colocar dos espejos paralelos uno frente al otro. Cualquier objeto entre ellos se reflejaría de forma recursiva.

Función recursiva de Python

En Python, sabemos que una función puede llamar a otras funciones. Incluso es posible que la función se llame a sí misma. Estos tipos de construcciones se denominan funciones recursivas.

La siguiente imagen muestra el funcionamiento de una función recursiva llamada recurse.

Función recursiva en Python

A continuación se muestra un ejemplo de una función recursiva para encontrar el factorial de un número entero.

El factorial de un número es el producto de todos los números enteros de 1 a ese número. Por ejemplo, el factorial de 6 (¡indicado como 6!) Es 1 * 2 * 3 * 4 * 5 * 6 = 720.

Ejemplo de función recursiva

 def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))

Salida

 El factorial de 3 es 6

En el ejemplo anterior, factorial()es una función recursiva como se llama a sí misma.

Cuando llamamos a esta función con un entero positivo, se llamará a sí misma de forma recursiva al disminuir el número.

Cada función multiplica el número por el factorial del número que está debajo hasta que es igual a uno. Esta llamada recursiva se puede explicar en los siguientes pasos.

 factorial (3) # 1a llamada con 3 3 * factorial (2) # 2da llamada con 2 3 * 2 * factorial (1) # 3a llamada con 1 3 * 2 * 1 # regreso de la 3a llamada como número = 1 3 * 2 # regreso de la segunda llamada 6 # regreso de la primera llamada

Veamos una imagen que muestra un proceso paso a paso de lo que está sucediendo:

Trabajo de una función factorial recursiva

Nuestra recursividad termina cuando el número se reduce a 1. Esto se llama condición base.

Toda función recursiva debe tener una condición base que detenga la recursividad o de lo contrario la función se llama a sí misma infinitamente.

El intérprete de Python limita la profundidad de la recursividad para ayudar a evitar las recursiones infinitas, lo que provoca desbordamientos de pila.

De forma predeterminada, la profundidad máxima de recursividad es 1000. Si se cruza el límite, el resultado es RecursionError. Veamos una de esas condiciones.

 def recursor(): recursor() recursor()

Salida

 Traceback (última llamada más reciente): Archivo "", línea 3, en Archivo "", línea 2, en un Archivo "", línea 2, en un Archivo "", línea 2, en un (La línea anterior se repitió 996 veces más ) RecursionError: se superó la profundidad máxima de recursividad

Ventajas de la recursividad

  1. Las funciones recursivas hacen que el código se vea limpio y elegante.
  2. Una tarea compleja se puede dividir en subproblemas más simples mediante la recursividad.
  3. La generación de secuencias es más fácil con la recursividad que con algunas iteraciones anidadas.

Desventajas de la recursividad

  1. A veces, la lógica detrás de la recursividad es difícil de seguir.
  2. Las llamadas recursivas son caras (ineficaces) ya que ocupan mucha memoria y tiempo.
  3. Las funciones recursivas son difíciles de depurar.

Articulos interesantes...