Factorial en c++

Por user Carlos Eduardo Plasencia Prado
Factorial en c++

En este tutorial aprenderemos a hacer una función de factorial en c++ mediante la estructura de control for y también aplicando recursividad. Además veremos cuáles son las ventajas de usar recursividad sobre algunas estructuras de control iterativas.

Primero veamos en qué consiste la función factorial. El factorial de un número es la multiplicación de los números que están comprendidos entre 1 hasta dicho número. Para expresar el factorial se suele utilizar la notación n!. Así la definición es la siguiente:

n! = 1 x 2 x 3 x 4 x 5 x ... x (n-1) x n.

Estructura de control for

Un bucle for hace que una instrucción o bloque de instrucciones se repita un número determinado de veces mientras se cumpla la condición.

for(inicializacion; condicion; incremento/decremento) {
   instrucción 1;
   ...........
   instrucción N; 
}

A continuación de la palabra for y entre paréntesis deben haber siempre tres zonas separadas por punto y coma:

  • zona de inicialización
  • zona de condición
  • zona de incremento ó decremento.

En alguna ocasión puede no ser necesario escribir alguna de ellas. En ese caso se dejarían en blanco, pero los punto y coma deberían aparecer.

El funcionamiento de un bucle for es el siguiente:

  1. Se inicializa la variable o variables de control.
  2. Se evalúa la condición.
  3. Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la ejecución del bucle y continúa el programa en la siguiente instrucción después del for
  4. Se actualiza la variable o variables de control (incremento/decremento)
  5. Se pasa al punto 2.

Ahora veremos el ejemplo del factorial implementado en c++:

#include  
using namespace std;
int main(void){
   int i;
   int fact=1;
   int numero;
   cout<<"ingresa un numero: ";
   cin>>numero;
   if(numero<0) fact =0;
   else if(numero==0) fact=1;
   else{
      for (i = 1; i <= numero; i++){
         fac = fact*i;
      }
   }
   cout<<"Factorial de "<
   system("pause");
}

Como podemos observar en el ejemplo, primero inicializamos nuestras variables i, fact y numero.

Después de ingresar el número por consola procedemos a evaluarlo. Si este es menor a cero, entonces el factorial también será 0, si es cero nuestro factorial será 1, caso contrario procedemos a calcular el factorial con el for.

En nuestro for inicializamos nuestra variable iterativa i en 1, esta se incrementará en 1 por cada iteración hasta que sea igual a número, dentro de las instrucciones por cada iteración se efectúa una multiplicación de todos los valores que va tomando i, en nuestro caso de 1 hasta el número y los va almacenando en la variable fact.

Una vez terminado el programa, mostramos en pantalla nuestro resultado.

Recursividad

En palabras simples, la recursividad es cuando una función tiene la característica de poder llamarse a sí misma dentro de sus instrucciones; gracias a esto, podemos utilizar a nuestro favor la recursividad en lugar de la iteración para resolver determinados tipos de problemas.

A continuación veremos el ejemplo de la función factorial usando recursividad:

#include  
using namespace std;
int factorial(int n) {
   if(n < 0) return 0;
   else if(n > 1) return n*factorial(n-1);
   return 1;
}
int main(void) {
   int numero;
   cout<<"ingresa un numero: ";
   cin>>numero;
   cout<<"Factorial de "<;
}

Como podemos observar en nuestro ejemplo nuestra función factorial recibe un valor n, evaluamos dicha variable, si esta es menor que cero la función nos retorna el valor 0, si n es mayor que uno llamamos otra vez a nuestra función factorial pero con n-1 y a esto lo multiplicamos por n, esto se repetirá hasta que n llegue a tomar el valor de 1.

La mejor forma de entenderlo podría ser:

5!

n=5 -> factorial(5) -> 5*factorial(4) -> 5*4*factorial(3) -> 5*4*3*factorial(2) ->5*4*3*2*factorial(1) -> 5*4*3*2*1 -> 120

Principio importante: Toda solución recursiva puede encontrar una solución iterativa equivalente, mientras que lo contrario no siempre es cierto. Por cuestiones de uso de memoria y rapidez se recomienda recursividad en lugar de interacciones.

La diferencia que podemos encontrar en la función recursiva y la iterativa es que la recursiva tienes que hacer constantes llamadas en las funciones que tienes en tu algoritmo o programa, mientras que en la iterativa no son necesarias tantas llamadas para la solución del problema.

Espero que hayan aprendido y les haya sido de utilidad este tutorial. Recuerden que esto está hecho en C++, pero vale para otros lenguajes. No olviden compartir con sus amigos y dejarnos sus dudas y opiniones en la caja de comentarios. Muchas gracias, ¡Hasta la próxima!

user

Carlos Eduardo Plasencia Prado

Backend Developer | Python / Django junior - Javascript / Node.js