Recursividad aplicada: Factorial

Hola de nuevo, ¿cuánto tiempo pasó? mmm no sé pero bueno… lo importante es que ya estoy de vuelta y ahora sí me voy a dar el tiempo de actualizar este blog más seguido, pero basta de cosas personales.

No me quiero meter en rollos de explicar lo que es la recursividad (googleen y diviértanse leyendo), lo que quiero es mostrarles algunos ejemplos muy sencillos de dónde podemos aplicar la recursividad. Hoy toca calcular el factorial de un numero de forma recursiva.

Es el código recursivo más fácil que se pueden encontrar:

#include
int factorial(int n)
{
  if(n<2)
    return 1;
  else
    return n * factorial(n-1);
}
int main()
{
  int num=0;
  printf("::CALCULAR FACTORIAL::n");
  printf("Introduce un numero: ");scanf("%i",&num); //Pedir variable num
  printf("tEl resultado es: %in", factorial(num)); //Llama la funcion e imprime resultado
  return 0;
}

Explicación

El caso base es que cuando n valga 1 o 0 retorna un 1, de lo contrario retorna la multiplicación de n * el factorial del numero anterior n-1. Supongamos que introducimos el número 3, cuyo factorial es 6 (3*2*1 = 6).

  1. n=3 No entra al caso base. Guardamos para después la operación 3 * factorial(2)
  2. n=2 No entra al caso base. Guardamos para después la operación 2 * factorial(1)
  3. n=1 Entra al caso base. Retorna 1, por lo tanto factorial(1) = 1
  4. Hacemos la última operación que guardamos 2 * factorial(1) = 2 * 1 = 2, por lo tanto factorial(2) = 2
  5. Hacemos la siguiente operación que guardamos 3 * factorial(2) = 3 * 2 = 6
  6. El factorial es 6

¡Uh que fácil!

24 thoughts on “Recursividad aplicada: Factorial

    1. lo que pasa es que tu compilador no se pausa automáticamente. Pon antes de la llave de cierre del main esto: cin.get();cin.get();

      Así doble, es como un getch();

  1. puse cin.get();cin.get();

    antes de la llave de cierre y aun asi me marca errror puedes poner el codigo completo te lo agradeceria

    1. Oh es cierto, perdón. Para usar cin.get(); debes incluir la librería iostream. Agrega esto después de la primera librería:
      #include<iostream>
      using namespace std;

  2. hola mira la verdad es q tengo q aser un programa igual pero ya puse todo si me corre pero si el profr me pied una explicacion de donde saq el cin.get();cin.get(); q le puedeo decir

  3. Hola tengo una dud, tengo un programa de division, pero no quiero mostrar el resultado de la division sino que el residuo, solo el ultimo numero:
    ej 100/12 el resultado es 8 pero el residuo es 4 ese residuo lo necesito mostrar y no he encontrado como. si me echan una ayuda se los agradeceria mucho

  4. Buena man pero tengo una dura como seria si pongo el numero 0 por q su factorial es 1 , y quisera saber como se aplicaria en una permutacion o con
    binacion he intentado ahcerla pèro no me sale seria muy vacan q lo hizieras te lo agredeceria mucho.

  5. Hola amigo ,vacan tu trabajo , podrias darme unas pautas como hacer una convinacion de la siguiente manera nCk= n!/(n-k)!k! estoi q llevo dias en ahcerla y no me sale te agradeceria mucho si me ayudas un poco

  6. ok yo tengo un codigo mas facil de hacer eso xd… esta echo en un compilador de c++ se llama zinjai….
    #include
    #include

    using namespace std;
    int potencia(int a,int n);
    int main(int argc, char *argv[])
    {
    int a,n;
    cout<>a;
    cout<>n;
    cout<<"Numeor Elevado: "<<potencia(a,n)<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
    }
    int potencia(int a,int n)
    {
    if(n==0)
    return 1;

    return potencia(a,n-1)*a;
    }

  7. Ayuda por favor dice asi:
    escriba un metodo recursivo que genere y sume ala siguiente secuencia:
    n n-1 n-2 2 1
    1 + 2 + 3 + n-1 + n
    por favor les pido esto es urgente

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s