El documento explica cómo calcular el factorial de un número utilizando un bucle for en C++ y recursividad. El factorial de un número es el producto de todos los enteros desde 1 hasta ese número. Se muestra un ejemplo de código para calcular el factorial de forma iterativa con un bucle for y de forma recursiva haciendo que la función factorial se llame a sí misma. La recursividad es más eficiente que la iteración para ciertos problemas, aunque consume más memoria.
2. PÁGINA 02
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;
}
3. zona de inicialización
zona de condición
zona de incremento ó decremento.
Se inicializa la variable o variables de control.
Se evalúa la condición.
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
Se actualiza la variable o variables de control
(incremento/decremento)
Se pasa al punto 2.
A continuación de la palabra for y entre paréntesis deben haber
siempre tres zonas separadas por punto y coma:
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.
2.
3.
4.
5.
Ahora veremos el ejemplo del factorial implementado en c++:
PÁGINA 03
4. PÁGINA 04
#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.
5. PÁGINA 05
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 "<;
}
6. PÁGINA 06
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.
Para saber mas del tema ver el siguiente video:
https://www.youtube.com/watch?
v=yNWuEDd8iQs