Anda di halaman 1dari 2

Explicacin paso a paso de Recursividad.

Utilizaremos como ejemplo la funcin factorial.


public class Recursividad {
static int factorial(int fact) {
if (fact>0) {
int valor=fact * factorial(fact-1);
return valor;
} else return 1; }
public static void main(String[] ar) {
int f=factorial(3);
System.out.println("El factorial de 3 es "+ f); }
}
Vamos a ver el siguiente diagrama, el orden es primero las lneas de abajo las llamadas y luego
las lneas de arriba las devoluciones:


Cuando en el programa hacemos una llamada a la funcin int f=factorial(3); desde el mtodo
main, comienza su ejecucin.
Primero comprueba si el argumento que se le ha pasado es mayor a 0 (revisa el cdigo). Como
en este caso el argumento vale 3, la variable valor tendra lo que valga el producto de 3 por el
factorial de 3-1, o sea, 3 por el factorial de 2.
Claro, para poder tomar esto debe calcular previamente cunto vale el factorial de 2, por lo se
produce la segunda llamada al mtodo factorial. En esta segunda llamada, sucede algo
parecido: el argumento vale 2, y como no es igual a cero el mtodo procede a retornar 2 por el
factorial de 1 (2 - 1), pero, obviamente, vuelve a suceder igual.
Para poder retornar esto ha de calcular previamente cunto vale el factorial de 1, por lo que se
produce la tercera llamada al mtodo factorial, volviendo a darse de nuevo la misma situacin:
como 1 no es igual a cero, procede a retornar el producto de 1 por el factorial de cero, y de
nuevo tiene que calcular cunto vale el factorial de cero, por lo que se produce una nueva
llamada al mtodo factorial. Sin embargo esta vez no se cumple la condicin, es decir, cero no
es mayor a cero, por lo que esta vez el mtodo factorial retorna 1 al mtodo que lo llam, que
era el que tena que calcular previamente cunto vala el factorial de 0 y multiplicarlo por 1.
As, la funcin que tena que calcular 1*factorial(0) ya sabe que la ltima parte, es decir,
factorial(0), vale 1, por lo que hace el producto y retorna el resultado al mtodo que lo llam,
que era el que tena que calcular cunto vala 2 * factorial(1). Como este ya tiene el resultado
de faltorial(1) (que es, recuerda 1*1), ejecuta el producto, retornando 2 al mtodo que lo llam,
que era el que tena que calcular cunto vala 3*factorial(2). Como ahora este mtodo ya sabe
que factorial(2) vale 2, ejecuta el producto y retorna el resultado, que es 6, finalizando la traza.
Si te das cuenta, un mtodo recursivo va llamndose a s mismo hasta que se cumple la
condicin que hace que termine de llamarse, y empieza a retornar valores en el orden inverso a
como se fueron haciendo las llamadas.

Anda mungkin juga menyukai