Oppure

Loading
17/12/10 17:17
Pitagora
#include <stdio.h>

int fact (int);

int main (void) {
    int x = 3;
    printf("%d! = %d (%d)\n", x, fact(x), x);
    fgetc(stdin);
    return 0;
}

int fact (int y) {
    if (y == 0 || y == 1) {
        return 1; /* è questo il vero valore che dovrà tornare quando y == ... però non è così Why? */ 
    } else {
        return y * fact(y - 1);
    }
}


Perchè fact(3) torna un valore uguale a 6 invece di un valore uguale ad 1 come è indicato nella 2° riga a partire dalla funzione fact :-?
aaa
17/12/10 18:30
lumo
intanto, forse non sai cos'è il fattoriale
fact( n ) = n! = 1*2*....*n

detto questo, pensiamo di aver chiamato fact(3)
3 non è ne 0 ne 1, quindi la funzione ritorna 3*fact(2)
2 è > 1, quindi ritorna 2*fact(1)
e fact(1) ritorna 1.
Tornando indietro, sostituiamo prima 1 a fact(1), quindi diventa fact(2)=2*1
sostituiamo fact(2) con 2*1 e troviamo fact(3)=3*2*1, capito?
aaa
17/12/10 18:33
pierotofy
3! = 3*2*1 = 6

La funzione è corretta.
Il mio blog: piero.dev
17/12/10 18:48
hackersitiz
Non credo tu abbia compreso bene la ricorsione...
Di solito le funzioni si richiamano in modo gerarchico...
La ricorsione è quando una funzione richiama se stessa fino a quando non si verifica il caso base...
Come ti ha spiegato la tua funzione fact fa ciò che deve fare quindi fa 3 * 2 * 1...
In effettii 3! = 3 * 2 * 1...
La ricorsione è composta dal caso base

if (y == 0 || y == 1) {
{
        return 1;
}


e dal passo ricorsivo
else
{
    return n * fact(n - 1);
}

Da quel che ho visto non hai capito bene la ricorsione...
Consiglio?
Si vai a vederti l'esempio ricorsivo dei fibonacci in modo da capirlo e poi svogli degli esercizi...
Te ne do uno(ammesso che tu voglia farlo)

una funzione che calcola i collegamenti tra vari punti...
Mi spiego meglio...
Allora una funzione che chiami come vuoi che riceva come parametro i punti e calcoli i suoi collegamenti..
Esempio:
punti = 3 --> collegamenti = 3
punti = 2 --> collegamenti = 1

Hai due possibilità:
o fai tutto in una funzione o fai una funzione che calcoli i numeri triangolari....
Saluti...
aaa
17/12/10 19:15
Numa Pompilio
Postato originariamente da hackersitiz:
l'esempio ricorsivo dei fibonacci


I fratelli Fibonacci?

[i]Si vai a vederti l'esempio.....e poi svogli degli esercizi


ahi mamma

ma cmq, la funzione non è corretta?

ps. si scherza :k:

Ultima modifica effettuata da Numa Pompilio 17/12/10 19:16
aaa
17/12/10 19:16
hackersitiz
??
aaa