Factorial de forma sencilla en C++

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
using namespace std;

int main()
{
    int num,fact=1;
    cout << "::FACTORIAL::" << endl;
    cout <> 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.

20 thoughts on “Factorial de forma sencilla en C++

  1. karnal una pregunta que pasa si el factorial de un numero es de forma repetitiva y por ejemplo que el programa tenga la opcion de escojer si es de forma repetitiva o forma recursiva?😮 ayudaaa porfaa xD

    lo de recursivo ya lo entendi pero de casualidad sabes en repetitivo😀

    gracias de antemano.

  2. Disculpa si kiero hacer una validacion, es decir que al momento de ingresar un caracter sea una letra el programa lo detecte y mande un mensaje de incorrecto o invalido.
    cual seria el proceso¿¿

  3. Hola gracias por el aporte.

    Tengo una gran duda.

    Primero inicializas a 2;luego i<= numero ( es decir es el limite hasta donde avanza i); i++( esto es el incremento de 1 es decir incrementa de 1 en uno en este caso hasta el limite que es el numero) mi duda es,

    donde pones fac=fac*i;

    Quiero entender o de mi parte entiendo que hace esto Multiplica fac por el incremento es decir i practicamente tiene un valor de 1,luego de 2 , luego de 3, etc,

  4. Exactamente, ¿por qué es menos eficiente este sistema que usar una función recursiva? Sí es cierto que a la hora de la verdad no vas a hacer muchos ciclos (ni muchas llamadas a función) ya que con un valor de num relativamente bajo vas a superar la capacidad de la variable que pongas para guardar el resultado (el factorial de 13 supera la capacidad de un int sin signo). Creo que deberías haber usado un float, o mejor un double, para almacenar el resultado.

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