//Programa para calcular el factorial de un numero recursivamente,
//con la finalidad de ver la diferencia entre la recursividad final y la no final.
#include <iostream>
using namespace std;

int factorialNoFinal (int num);
int factorialFinal (int num, int fact);

int factorialNoFinal (int num)  //recursividad no final
{ //Pre: Verdadero
int fact;

if (num==0)            //Caso que 'num' valga 0
fact = 0;
else { //resto de casos de 1 hasta num
if (num==1)
fact = 1;
else
fact = factorialNoFinal(num-1)*num;
}       //a medida que vamos volviendos de las llamadas
        //recursivas, vamos calculando el factorial
        return (fact);
//Post: fact = Producto x:1..num:x
//fact tendra como valor el producto entre los numeros
//existentes entre 1 i 'num'
}

int factorialFinal(int num, int fact)  //recursivas final
{  //Pre: Verdadero

if (num==0)    //Caso concreto que 'num' valga 0
fact =0;
else {  //resto de casos de 1 hasta N 
if(num==1)
fact = 1*fact;
else
  fact = factorialFinal(num-1,fact*num);
}  //cuando volvemos de las llamadas recursivas,
   //ya tenemos calculado el factorialFinal
return (fact);

//Post: fact = Producto x:1..num:x 
//fact tendra como valor el producto entre los numeros
//existentes entre 1 i 'num'
}

main()
{
    int solucioFinal,solucioNoFinal,num;
    system ("color F1");
    cout << endl <<"Escriba un numero: "<< endl;
    cin >> num;
    cout << endl;
    
    solucioFinal = factorialFinal(num,1);
    solucioNoFinal = factorialNoFinal(num);
    
    cout << "El factorial de " << num << " es: " << endl << endl;
    cout <<"                 "<< "Recursividad Final: "<< solucioFinal << endl;
    cout <<"                 "<< "Recursividad No Final: "<< solucioNoFinal << endl;
    return system("pause");
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: