PDA

Visualizza la versione completa : [C]come si fa il fattoriale di un numero?


ascatem
06-10-2004, 16:09
non ho voglia di stare a fare milel cicli o ke.. non c'è una funzione in qualche libreria per fare il fattoriale di un numero?

(n!)
3!=3*2*1=6
4!=4*3*2*1= 24
{per chi non sapesse cos'è il fattoriale o cosa intendo..}
grazie!!!

ascatem
06-10-2004, 17:58
vi prego.. risp!!!

suomi_viking_86
06-10-2004, 18:02
prova con la ricorsione

ascatem
06-10-2004, 18:08
Originariamente inviato da suomi_viking_86
prova con la ricorsione

vabbè... speravoc i fosse una unzione in qualche libreria... ho fatto direttamente unalgoritmo che faccia il fattoriale.

Johnny_Depp
06-10-2004, 18:13
double Fattoriale(int n)
{
if(n==0) return 1; else return n*Fattoriale(n-1);
}

iguana13
06-10-2004, 19:31
versione iterativa:



long int fattoriale(int n)
{
int i; long int result = 1;
for(i=0; i<n; i++)
result *= n;
return result;
}

andrea_NET-_DSL
06-10-2004, 21:10
Originariamente inviato da iguana13
versione iterativa:



long int fattoriale(int n)
{
int i; long int result = 1;
for(i=0; i<n; i++)
result *= n;
return result;
}

sicuro che vada bene?? :stordita: :D
Io avrei fatto:

long int fattoriale(int n){
int i; long int res=1;
for(i=n;i>1;i--)
res *=i;

return res;
}


apparte che io decremento il contatore ,mentre tu lo incrementi,secondo me il problema è che nella tua versione associ ripetitivamente a result il prodotto tra il numero di cui calcolare il fattoriale per l'"accumolo" createsi in result stesso....cioè non decrementi mai n e lo moltiplichi sempre cosi' com'è!


sbaglio?? :fagiano: :)

ps se provio vogliamo farlo in "salita" :D LOL avrei fatto...

long int fattoriale(int n){
int i; long int res=1;
for(i=0;i<n:i++)
res *=i;

return res;
}
forse volevi scriverlo cosi'? :)

geppo80
07-10-2004, 13:08
Originariamente inviato da Johnny_Depp

double Fattoriale(int n)
{
if(n==0) return 1; else return n*Fattoriale(n-1);
}

ma + facile di così?!?! (io avrei messo int e non double.. cmq)

andrea_NET-_DSL
07-10-2004, 14:28
Originariamente inviato da geppo80
ma + facile di così?!?! (io avrei messo int e non double.. cmq)

bè double o long int sono + appropiati visto che la funziona fattoriale ritorna numeri molto grandi!

:)

iguana13
07-10-2004, 14:42
Originariamente inviato da andrea_NET-_DSL
sicuro che vada bene?? :stordita: :D
Io avrei fatto:

long int fattoriale(int n){
int i; long int res=1;
for(i=n;i>1;i--)
res *=i;

return res;
}


apparte che io decremento il contatore ,mentre tu lo incrementi,secondo me il problema è che nella tua versione associ ripetitivamente a result il prodotto tra il numero di cui calcolare il fattoriale per l'"accumolo" createsi in result stesso....cioè non decrementi mai n e lo moltiplichi sempre cosi' com'è!


sbaglio?? :fagiano: :)

ps se provio vogliamo farlo in "salita" :D LOL avrei fatto...

long int fattoriale(int n){
int i; long int res=1;
for(i=0;i<n:i++)
res *=i;

return res;
}
forse volevi scriverlo cosi'? :)

Sì hai ragione, l'ho fatto al volo senza neanche riguardarlo... ed ho scritto una grande cazzata!

Tra l'altro siccome i parte da zero, la prima volta mltiplica per zero e quindi rimarrà sempre zero!

:fagiano: !

Loading