Recursividad Final y No Final Ramón Costa (2004-06-13)
Un sencillo ejemplo para calcular el factorial de un número recursivamente, con la finalidad de ver la diferencia entre la recursividad Final y la No Final.
/********************************************************** * F A C T O R I A L * * Prueba de Recursividad Final y No Final * Data: 12/6/04 Autor: Ramon Costa * **********************************************************/ #include <iostream.h> 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 N 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) // recursividad 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 factorial return (fact); // Post: fact = Producto x:1..num:x // fact tendra como valor el producto entre los numeros // existentes entre 1 i 'num' } void main() { int solucioFinal,solucioNoFinal,num; cout << endl << "Introduce 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; }