Por
ejemplo:
Podríamos
crear una función recursiva para calcular el factorial de un número entero.
El
factorial se simboliza como n!, se lee como "n factorial", y la
definición es:
n! = n *
(n-1) * (n-2) * ... * 1
Hay
algunas limitaciones:
- No es posible calcular el factorial de números negativos, no está definido.
- El factorial de cero es 1.
Veamos
paso a paso, lo que pasa cuando se ejecuta esta función, por ejemplo: factorial
(4):
1a
Instancia
n=4
n > 1
salida ← 4 * factorial(3) (Guarda el valor de n = 4)
n=4
n > 1
salida ← 4 * factorial(3) (Guarda el valor de n = 4)
2a
Instancia
n > 1
salida ← 3*factorial(2) (Guarda el valor de n = 3)
n > 1
salida ← 3*factorial(2) (Guarda el valor de n = 3)
3a
Instancia
n > 1
salida ← 2*factorial(1) (Guarda el valor de n = 2)
n > 1
salida ← 2*factorial(1) (Guarda el valor de n = 2)
4a
Instancia
n == 1 → retorna 1
n == 1 → retorna 1
3a
Instancia
(recupera n=2 de la pila) retorna 1*2=2
(recupera n=2 de la pila) retorna 1*2=2
2a
instancia
(recupera n=3 de la pila) retorna 2*3=6
(recupera n=3 de la pila) retorna 2*3=6
1a
instancia
(recupera n=4 de la pila) retorna 6*4=24
Valor de retorno → 24
(recupera n=4 de la pila) retorna 6*4=24
Valor de retorno → 24
Aunque la
función factorial es un buen ejemplo para demostrar cómo funciona una función
recursiva, la recursividad no es un buen modo de resolver esta función, que
sería más sencilla y rápida con un simple bucle for.
La
recursividad consume muchos recursos de memoria y tiempo de ejecución, y se
debe aplicar a funciones que realmente le saquen partido.
Veamos
otro ejemplo: visualizar las permutaciones de n elementos.
Las
permutaciones de un conjunto son las diferentes maneras de colocar sus
elementos, usando todos ellos y sin repetir ninguno. Por ejemplo para A, B, C,
tenemos: ABC, ACB, BAC, BCA, CAB, CBA.
No hay comentarios:
Publicar un comentario