Qué hace exactamente este código

Pedro
20 de Noviembre del 2005
Hola, aquí dejo el código y lo que no entiendo es, aunque sé que es para algo del factorial, no sé lo que hace en concreto. Y por otro lado, la parte iterativa (fac_i) es la que no entiendo, la recursiva sí. Gracias.

#include <stdio.h>

#define VALOR 5
#define FACT 120

int fact_i(int v){
int r=1, i=1;
while (i<=v){
r=r*i;
i=i+1;
}
return r;}

int fact_r(int v){
if (v==0)
return 1;
else
return v*fact_r(v-1);
}
main(){
int r,valor=VALOR;
if((r=fact_i(valor))!=fact_r(valor))
printf("Código erróneo\n");
else
if (r==FACT)
printf("Código correcto\n");
else printf("Algo falla");

system("PAUSE");
return 0;
}

chuidiang
20 de Noviembre del 2005
Hola:

Pues hace el factorial de forma iterativa. r es el resultdo e i es el indice que se itera.
Inicialmente , se pone el resultado a 1.
Luego se va incrementando i de uno en uno hasta que llegue al valor de v. En cada iteracion se multiplica el resultado anterior r por i y se guarda en r.
Por ejemplo, si v=3, en cada iteracion tendríamos esto

// i=1
r=r*i; // r = 1*1;
i=i+1; // i=1+1;

// i=2
r=r*i; // r = 1*2;
i=i+1; // i=2+1;

// i=3
r=r*i; // r = 2*3;
i=i+1; // i=3+1;

Se acaba el bucle, devuelve 6, que es el factorial de 3

Se bueno