Recursividad en Python

El término Recursión se puede definir como el proceso de definir algo en términos de sí mismo. En palabras simples, es un proceso en el que una función se llama a sí misma directa o indirectamente. imgVentajas de usar la recursividad

  • Una función complicada se puede dividir en subproblemas más pequeños utilizando la recursividad.
  • La creación de secuencias es más simple a través de la recursión que utilizando cualquier iteración anidada.
  • Las funciones recursivas hacen que el código parezca simple y efectivo.

Desventajas de usar la recursividad

  • Se consume mucha memoria y tiempo a través de llamadas recursivas, lo que hace que su uso sea costoso.
  • Las funciones recursivas son difíciles de depurar.
  • El razonamiento detrás de la recursividad a veces puede ser difícil de analizar.

Sintaxis:

def func(): <--
              |
              | (recursive call)
              |
    func() ----

Ejemplo 1: Una secuencia de Fibonacci es la secuencia entera de 0, 1, 1, 2, 3, 5, 8…. 

Python3

# Program to print the fibonacci series upto n_terms
 
# Recursive function
def recursive_fibonacci(n):
  if n <= 1:
      return n
  else:
      return(recursive_fibonacci(n-1) + recursive_fibonacci(n-2))
 
n_terms = 10
 
# check if the number of terms is valid
if n_terms <= 0:
  print("Invalid input ! Please input a positive value")
else:
  print("Fibonacci series:")
for i in range(n_terms):
    print(recursive_fibonacci(i))
Producción

Fibonacci series:
0
1
1
2
3
5
8
13
21
34

Producción:

Fibonacci series:
0
1
1
2
3
5
8
13
21
34

Ejemplo 2: ¡El factorial de 6 se denota como 6! = 1*2*3*4*5*6 = 720. 

Python3

# Program to print factorial of a number
# recursively.
 
# Recursive function
def recursive_factorial(n):
  if n == 1:
      return n
  else:
      return n * recursive_factorial(n-1)
 
# user input
num = 6
 
# check if the input is valid or not
if num < 0:
  print("Invalid input ! Please enter a positive number.")
elif num == 0:
  print("Factorial of number 0 is 1")
else:
  print("Factorial of number", num, "=", recursive_factorial(num))
Producción

Factorial of number 6 = 720

¿Qué es la recursividad de cola?

Un tipo único de recursividad donde el último procedimiento de una función es una llamada recursiva. La recursividad se puede automatizar realizando la solicitud en el marco de pila actual y devolviendo la salida en lugar de generar un nuevo marco de pila. El compilador puede optimizar la recursión de cola, lo que la hace mejor que las funciones recursivas que no son de cola. ¿Es posible optimizar un programa haciendo uso de una función recursiva de cola en lugar de una función no recursiva de cola?Si consideramos la función dada a continuación para calcular el factorial de n, podemos observar que la función parece una cola recursiva al principio, pero es una función no cola recursiva. Si observamos de cerca, podemos ver que el valor devuelto por Recur_facto(n-1) se usa en Recur_facto(n), por lo que la llamada a Recur_facto(n-1) no es lo último que hace Recur_facto(n). 

Python3

# Program to calculate factorial of a number
# using a Non-Tail-Recursive function.
 
# non-tail recursive function
def Recur_facto(n):
   
    if (n == 0):
        return 1
   
    return n * Recur_facto(n-1)
   
# print the result
print(Recur_facto(6))
Producción

720

Podemos escribir la función dada Recur_facto como una función recursiva de cola. La idea es usar un argumento más y en el segundo argumento acomodamos el valor del factorial. Cuando n llega a 0, devuelve el valor final del factorial del número deseado. 

Python3

# Program to calculate factorial of a number
# using a Tail-Recursive function.
 
# A tail recursive function
def Recur_facto(n, a = 1):
   
    if (n == 0):
        return a
   
    return Recur_facto(n - 1, n * a)
   
# print the result
print(Recur_facto(6))
Producción

720

Publicación traducida automáticamente

Artículo escrito por shardul_singh_tomar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *