Ya vimos como calcular el factorial de un número c++ en forma recursiva, sin embargo hay una forma mucho mas fácil de entender y de aplicar (pero menos eficiente). Vamos viendo:
Si el factorial de un número es la multiplicación de cada número desde 1 hasta ese número (por ejemplo factorial de 4 = 1*2*3*4 = 24), entonces es muy sencillo crear un ciclo de 1 hasta el número pedido en c++ para hacer el cálculo.
#include<iostream>
using namespace std;
int main()
{
int num,fact=1;
cout << "::FACTORIAL::" << endl;
cout << "Introduce un numero: "; cin >> num;
for(int i=2; i<=num; i++)
{
fact = fact * i;
}
cout << "Su factorial es: " << fact;
cin.get();cin.get();
return 0;
}
¿Entonces porqué el ciclo empieza en 2? Si comenzara en 1, el proceso para el numero 3 (por poner un ejemplo) serÃa asÃ:
- fact = fact * i -> fact = 1 * 1 -> fact = 1
- fact = fact * i -> fact = 1 * 2 -> fact = 2
- fact = fact * i -> fact = 2 * 3 -> fact = 6
Como ven, el primer paso es totalmente innecesario.
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<stdio.h>
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: %i\n", 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).
- n=3 No entra al caso base. Guardamos para después la operación 3 * factorial(2)
- n=2 No entra al caso base. Guardamos para después la operación 2 * factorial(1)
- n=1 Entra al caso base. Retorna 1, por lo tanto factorial(1) = 1
- Hacemos la última operación que guardamos 2 * factorial(1) = 2 * 1 = 2, por lo tanto factorial(2) = 2
- Hacemos la siguiente operación que guardamos 3 * factorial(2) = 3 * 2 = 6
- El factorial es 6
¡Uh que fácil!