/* La versión recursiva vista de factorial no presenta recursión de cola. Use un acumulador para obtener una versión recursiva que presente recursión de cola. Fact(3)=1x2x3 Fact(4)=1x2x3x4=Fact(3)x4 Fact(0)=1 Fact(n)=Fact(n-1)xn */ #include typedef unsigned int uint; //versión recursiva vista de factorial //con esta configuracion me queda en el stack las multiplicaciones pendientes con n cada vez que llamo a Fact(n-1) uint Fact(uint n){ if(n==0){ return 1; }else{ return n * Fact(n-1); } } //acumulador para obtener una versión recursiva que presente recursión de cola /* Devuelve el producto de factorial (n) por 'acum '. */ uint factAcum (uint n , uint acum){ if(n==0){ return acum; // factAcum(0) = factorial de 0 * acum = 1 * acum = acum }else{ return factAcum(n-1, acum*n); } } int main() { int n=4; printf("El factorial de %d es %d \n", n, Fact(n)); printf("El factorial de %d es %d \n", n, factAcum(n,2)); return 0; }