Autor Tema: Algoritmo recursivo factorial: ejemplo explicación clara  (Leído 17535 veces)

bartvander

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 15
    • Ver Perfil
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.
« Última modificación: 05 de Septiembre 2014, 10:19 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Algoritmo recursivo
« Respuesta #1 en: 14 de Marzo 2013, 14:52 »
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
Código: [Seleccionar]
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



bartvander

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 15
    • Ver Perfil
Re:Algoritmo recursivo
« Respuesta #2 en: 14 de Marzo 2013, 15:02 »
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.

bartvander

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 15
    • Ver Perfil
Re:Algoritmo recursivo
« Respuesta #3 en: 14 de Marzo 2013, 15:13 »
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.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".