Sunteți pe pagina 1din 3

Recursividad

Se dice que una funcin es recursiva cuando se define en funcin de si misma.


No todas las funciones pueden llamarse a s mismas, sino que deben estar diseadas
especialmente para que sean recursivas, de otro modo podran conducir a bucles
infinitos, o a que el programa termine inadecuadamente.
Tampoco todos los lenguajes de programacin permiten usar recursividad.
C++ permite la recursividad. Cada vez que se llama a una funcin, se crea un juego de
variables locales, de este modo, si la funcin hace una llamada a si misma, se guardan
sus variables y parmetros, usando la pila, y la nueva instancia de la funcin trabajar
con su propia copia de las variables locales. Cuando esta segunda instancia de la
funcin retorna, recupera las variables y los parmetros de la pila y contina la
ejecucin en el punto en que haba sido llamada.
Por ejemplo:
Podramos crear una funcin recursiva para calcular el factorial de un nmero entero.
El factorial se simboliza como n!, se lee como "n factorial", y la definicin es:
n! = n * (n-1) * (n-2) *... * 1
Hay algunas limitaciones:

No es posible calcular el factorial de nmeros negativos, no est


definido.

El factorial de cero es 1.

Por definicin, el factorial de 1 es 1 (1!=1) as como el factorial de 0 (0!


=1)tambin es 1. Por lo que podemos implementar sta condicin para que la
funcin no sea interminable.
As, la definicin de la funcin consta de la recursiva que se llama a s misma, y
la condicin para detenerse.
int factorial(int n){
if n==1{
return 1;
}else{
return n * factorial(n-1);
}
}
O con un while:
int factorial(int n){

while (n!=1){
return n * factorial(n-1);
}
return 1;
}

/* Funcin recursiva para clculo de factoriales */


int factorial(int n) {
if(n < 0) return 0;
else if(n > 1) return n*factorial(n-1); /* Recursividad */
return 1; /* Condicin de terminacin, n == 1 */
}

Veamos paso a paso, lo que pasa cuando se ejecuta


esta funcin, 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 funcin factorial es un buen ejemplo para


demostrar cmo funciona una funcin recursiva, la
recursividad no es un buen modo de resolver esta
funcin, que sera ms sencilla y rpida con un simple
bucle for.

[1] Fernando Briano, Recursividad en programacin,consultado el 11 de abril del


2016, (en lnea, en http://roble.pntic.mec.es/~rsoto1/descartes/complejos.htm
[2] sin autor, consultado el 11 de abril del 2016, (en lnea, en
http://c.conclase.net/curso/?cap=024 )

S-ar putea să vă placă și