Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: bartvander en 14 de Marzo 2013, 12:58
-
Bueno pues estoy con los algoritmo recursivos y no soy capaz de saber como función. Pongo un ejemplo:
int factorial (int n)
if (n==0) return 1;
else return n*factorial(n-1)
yo entiendo que le metes un número n y como llama a la misma función dentro del metodo se va llamando recursivamente. Mi duda es cuando llega a n=0 tendría que devolver 1 y sin en cambio devuelve el factorial de n. Me podrías explicar como va funcionando este bucle. Otra de las dudas que me surgen es se realiza el primer bucle y donde se guarda el resultado de ese bucle, por ejemplo:
si queremos el factorial de 5, en la primera vuelta sería:
return 5 + factorial (n-1) que es 4= 20. devuelve ese valor, pero no lo almacena para sumar el siguiente resultado.
-
Si llamas por ejemplo al factorial de 5 el proceso es:
Devuelve 5 * factorial (4) entra en primera recursión
factorial (4) devuelve 4 * factorial (3) entra en segunda recursión
factorial (3) devuelve 3 * factorial (2) entra en tercera recursión
factorial (2) devuelve 2 * factorial (1) entra en cuarta recursión
factorial (1) devuelve 1 * factorial (0) entra en quinta recursión
factorial (0) devuelve 1 y termina la quinta recursión que devuelve 1*1
termina la cuarta recursión que devuelve 2*1
termina la tercera recursión que devuelve 3*2*1
termina la segunda recursión que devuelve 4*3*2*1
termina la primera recursión que devuelve 5*4*3*2*1
Si ejecutas esto
public class prueba {
public static void main (String[] Args){
System.out.println ("Resultado de factorial de 5 es "+ factorial(5));
}
static int factorial (int n){
if (n==0) { System.out.println ("Caso base"); return 1;}
else{
System.out.println ("Recursión");
return n*factorial(n-1);}
}
}
El resultado es
Recursión
Recursión
Recursión
Recursión
Recursión
Caso base
Resultado de factorial de 5 es 120
Es decir, cinco recursiones, se llega al caso base y devuelve el resultado
-
lo de los resultados lo entiendo que salga 5*4*3*2*1, pero cuando n=0 lo que devuelve es 1, este sería el último resultado que devuelve no? no veo ninguna varible que acumule este resultado y que luego devuelva ese valor. En algún sitio estoy perdido.
-
Ok ya lo entendí.
hace:
n*factorial de (n-1) = 5 y hace la función otra vez que quedará 5*4*FACTORIAL (n-1)... y así hasta que llega a n=0 que sería 1 y por o tanto quedaría 5*4*3*2*1.
Es el primer algoritmo que veo recursivo y me ha costado comprenderlo.