Advertisement
  1. Code
  2. Python

Desmitificando la recursividad en Python

Scroll to top
Read Time: 6 min

Spanish (Español) translation by Ruben Solis (you can also view the original English article)

La mayoría de las tareas complejas en Python se pueden dividir en subtareas más simples. La recursividad ayuda a lograr esto, por lo tanto, hace que el código sea limpio y ordenado. Este tutorial presentará la recursividad, los beneficios de la recursividad y cómo usarla en la programación en Python.

¿Qué es la recursividad?

La recursividad es un método para resolver un problema con las soluciones a instancias más pequeñas del mismo problema. Este enfoque se puede aplicar a muchos tipos de desafíos en la programación.

Los beneficios de usar la recursividad

Algunos de los beneficios de usar la recursividad son:

  • La recursividad agrega simplicidad al escribir código, lo que facilita la depuración.
  • La recursividad reduce la cantidad de tiempo que tarda un algoritmo en ejecutarse en función de la longitud de la entrada.
  • La recursividad también se prefiere cuando se resuelven problemas muy complejos, especialmente problemas en estructuras basadas en árboles, porque funciona mejor.

Introducción a la función recursiva en Python

Aunque la recursividad parece un procedimiento complicado, no es tan complicado. En términos sencillos, supón que tienes dos rectángulos A y B. Si los juntamos, forman un rectángulo C. Este es en sí mismo un procedimiento recursivo. Hemos usado instancias más pequeñas de un rectángulo para definirse a sí mismo, y si tuviéramos que escribir una función en Python, sería como sigue:

1
def rectangle(a,b):
2
    return a+b
3
    

Dado que una función recursiva se llama a sí misma, es necesario que haya una regla o un punto de interrupción en el que terminaría el proceso o bucle. Esta condición se conoce como caso base. Un caso base es un requisito en todo programa recursivo; de lo contrario, el procedimiento resultaría en un bucle infinito.

El segundo requisito es el caso recursivo cuando la función se llama a sí misma.

Veamos un ejemplo:

En este ejemplo, escribirás una función factorial que toma un número entero (positivo) como entrada. El factorial de un número se obtiene multiplicando el número por todos los enteros positivos inferiores. Por ejemplo, factorial(3) = 3 x 2 x 1, factorial(2) = 2 x 1 y factorial(0) = 1.

Lo primero que debemos hacer es definir nuestro caso base, que será factorial(0) = 1.

Como puedes ver arriba, existe una relación entre cada escenario de factorial consecutivo. Debes notar que factorial(4) = 4 x factorial(3). Del mismo modo, factorial(5) = 5 x factorial(4).

La segunda parte escribirá una función que se llame a sí misma.

Ahora que lo hemos simplificado, la función resultante será:

1
def factorial(n):
2
    if(n == 0):
3
	  #Define our base case?

4
		return 1  
5
	else:
6
		return n*factorial(n-1) 
7
		
8
print(factorial(5))
9
10
#result 

11
12
# 120

La solución si n==0 es:

1
def factorial(n):
2
    if(n == 0):
3
      #Define our base case?

4
		return 1  
5
	else:
6
		return n*factorial(n-1) 
7
		
8
print(factorial(0))
9
10
#result 

11
12
# 0

Ahora que sabes cómo escribir funciones recursivas, veamos varios casos de estudio que solidificarán tu comprensión de la recursividad.

Caso de estudio 1: Fibonacci

En una secuencia de Fibonacci, cada número es la suma de los dos números anteriores, como: 1 + 1 = 2; 1 + 2 = 3; 2 + 3 = 5; 3 + 5 = 8. La secuencia de Fibonacci se ha aplicado en muchas áreas, y la más común es en la predicción del precio de una acción en el mercado de valores por parte de los operadores de forex.

La secuencia de Fibonacci comienza con 0 y 1. El primer número en una secuencia de Fibonacci es 0, el segundo número es 1 y el tercer término en la secuencia es 0 + 1 = 1. El cuarto es 1 + 1 = 2 y así sucesivamente .

Para crear una función recursiva, debes tener dos casos base, es decir, 0 y 1. Luego puedes traducir el patrón de adición al caso else.

La función resultante será:

1
def fibonacci(n):
2
    if(n == 1):
3
	  #define Base case 1 

4
		return 0+1 
5
	elif(n == 2):
6
	  #define Base case 1 

7
		return 1+2 
8
	else:
9
		return fibonacci(n) + fibonacci(n-1)
10
		
11
print(fibonacci(5))
12
13
#result

14
15
# 

Caso de estudio 2: Invertir un string

En este ejemplo, escribirás una función que toma un string como entrada y luego devuelve el reverso del string.

Lo primero que debemos hacer es definir nuestro caso base, que verificará si la longitud del string es igual a 0 y, de ser así, devolverá el string en sí.

El segundo paso es llamar de forma recursiva a la función reverse para cortar la parte del string que excluye el primer carácter y luego concatenar el primer carácter al final del string cortado.

La función resultante es la que se muestra a continuación:

1
def reverse(a):
2
  
3
    if len(a) == 0:
4
        return a
5
    else:
6
        return reverse(a[1:]) + a[0]
7
8
print(reverse("Python is a very easy language to learn"))
9
10
# result

11
12
#nrael ot egaugnal ysae yrev a si nohtyP

13
14

Caso de estudio 3: Suma de elementos

En este ejemplo, escribirás una función que toma un array como entrada y luego devuelve la suma de los elementos de la lista.

Lo primero que debemos hacer es definir nuestro caso base, que verificará si el tamaño de la lista es cero y devolverá 0 si es True.

El segundo paso devuelve el elemento y una llamada a la función sum() menos un elemento de la lista.

La solución es como se muestra a continuación:

1
def sum_of_numbers(l):
2
   if len(l) == 1:
3
        return 0
4
   else:
5
        return l[0] + sum(l[1:])
6
        
7
a =[5,7,3,8,10]
8
9
print(sum(a))
10
11
# result

12
# 33

La solución para una lista vacía es la que se muestra a continuación:

1
def sum_of_numbers(l):
2
   if len(l) == 1:
3
        return 0
4
   else:
5
        return l[0] + sum(l[1:])
6
        
7
8
b =[]
9
 
10
print(sum(b))
11
12
# result

13
14
# 0

Conclusión

Este tutorial ha cubierto lo que es necesario para usar la recursividad para resolver programas complejos en Python. También es importante tener en cuenta que la recursividad tiene sus propias limitaciones:

  • La recursividad ocupa mucho espacio en la pila, por lo que el mantenimiento del programa es un poco lento.
  • Las funciones recursivas requieren más espacio y tiempo para ejecutarse.

Recuerda, no dudes en ver lo que tenemos disponible para la venta y para estudiar en el Envato Market, y por favor haz cualquier pregunta y brinda tus valiosos comentarios en los comentarios de abajo.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.