Curso de introducción a la programación en python

Autor: Luis Fernando Apáez Álvarez

Clase 19: Recursión

Primeros ejemplos

Básicamente, una función recursiva es una función que se llama a sí misma en el proceso de ejecución. Su funcionamiento es muy similar a la iteraciones que vimos en clase pasadas. Comenzaremos trabajando con el siguiente ejemplo que posteriormente explicaremos paso a paso:

Captura2.PNG

donde

Continuaremos con este procedimiento hasta que x=0 pues, una vez que dicho valor es impreso y es ingresado a la función cuentaRegresiva(x), una vez que le quitemos uno tendremos como resultado x=-1 por lo que pasaremos a la ejecución del código correspondiente al else de nuestro condicional if, lo cual regresa el mensaje 'Fin'.

Podemos ver otro ejemplo sobre funciones recursivas en Python utilizando el factorial de un número. Recordemos que dado $n\in\mathbb{N}$ tenemos que

$$ n!=n(n-1)\cdots3\cdot2\cdot1 $$

Ahora, podemos implemenar lo anterior mediante funciones recursivas:

donde al ingresar el 5 a la función obtenemos que resultado = 5 * factorial(4), luego al asignarle el 4 a la función tendremos que resultado = 4 * factorial(3) y así hasta obtener que resultado = 2 * factorial(1), donde factorial(1) retorna como resultado 1 y por ende tendremos que

resultado = 5 * 4 * 3 * 2 * 1

o lo que es lo mismo obtenemos el valor de resultado final el cual es 120.

Veamos que

también puede explicarse observando que

Captura.PNG

Factorial a fondo

Para finalizar volvamos a ver la función recursiva que nos arroja el factorial de un número, observando cuidadosamente cada ejecución cuando llamamos a dicha función:

Último ejemplo

Finalmente vamos a crear un función recursiva para calcular los números de fibonacci. Recordemos que el n-ésimo número de Fibonacci se obtiene a partir de los dos anteriores, esto es:

$$ F_{n}=F_{n-1}+F_{n-2}, \ \ \ n \geq 2 $$

Por ejemplo, tomando los primeros dos números de la sucesión de Fibonacci $1$ y $1$ podemos obtener el tercer término el cual es $1+1=2$, el cuarto término el cual es $1+2=3$, el quinto término el cual es $2+3=5$, etcétera.

Lo que haremos será que nuestra función devuelva 1 cuando el término a buscar ($n$) sea 1 ó 2 y en los demás casos devolverá el valor de fibonacci(n-1) + fibonacci(n-2). Por ejemplo, si $n=4$ entonces la función devolverá el valor de fibonacci(3) + fibonacci(2) que es lo mismo que fibonacci(3) + 1. Luego, para obtener fibonacci(3) se tedrá que la función devolverá el valor de resultante de fibonacci(2) + fibonacci(1) lo cual equivale a $1+1=2$ y por ende, regresando a la ejecución pendiente fibonacci(3) + fibonacci(2) tendremos el valor de $2+1=3$. Lo anterior se puede implementar en código como sigue:

Socialmedia.PNG