sábado, 4 de agosto de 2012


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)
2a Instancia
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)
4a Instancia
n == 1 → retorna 1
3a Instancia
(recupera n=2 de la pila) retorna 1*2=2
2a instancia
(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
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