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 )