gscaparrotti
24-11-2013, 12:33
Ciao a tutti, torno a farvi una nuova richiesta.
Ho scritto un piccolo programma in C che calcola il fattoriale di un numero, con una funzione fatta appositamente per questo calcolo. Alla fine della funzione il fattoriale viene calcolato correttamente, e la ricorsione termina come previsto, ma l'istruzione return non restituisce al main, nel quale poi è presente la variabile che deve assumere il valore del fattoriale, il valore corretto.
Non riesco proprio a capire cosa non va, quindi spero che qualcuno di voi possa darmi una mano. :mano:
Allego di seguito il sorgente.
#include <stdio.h>
#include <stdlib.h>
int main() {
int numero;
int risultato;
printf("CALCOLO DEL FATTORIALE TRAMITE UNA FUNZIONE RICORSIVA");
printf("\n\nInserire un numero: ");
fflush(stdin);
scanf("%i", &numero);
printf("\n");
risultato=fattoriale(numero);
printf("\nRISULTATO");
printf("\nIl fattoriale di %i %c %i\n\n", numero, 138, risultato);
system("pause");
return 0;
}
int fattoriale(int numero) {
static int ricorsione=1;
static int parziale;
register int contatore;
if(ricorsione==1 && numero>0)
parziale=numero-1;
else if(ricorsione==1 && numero<0)
parziale=numero+1;
for(contatore=1;contatore<ricorsione;contatore++)
printf(" ");
printf("Questa %c la chiamata n. %i alla funzione \'fattoriale\'\n", 138, ricorsione);
for(contatore=1;contatore<ricorsione;contatore++)
printf(" ");
printf("Eseguo il passaggio: %i moltiplicato per %i, ", numero, parziale);
numero=parziale*numero;
if(parziale<0)
numero=-numero;
printf("che fa %i\n\n", numero);
if(parziale>0)
parziale--;
else
parziale++;
ricorsione++;
if(parziale!=0)
fattoriale(numero);
else
return numero;
}
Ho scritto un piccolo programma in C che calcola il fattoriale di un numero, con una funzione fatta appositamente per questo calcolo. Alla fine della funzione il fattoriale viene calcolato correttamente, e la ricorsione termina come previsto, ma l'istruzione return non restituisce al main, nel quale poi è presente la variabile che deve assumere il valore del fattoriale, il valore corretto.
Non riesco proprio a capire cosa non va, quindi spero che qualcuno di voi possa darmi una mano. :mano:
Allego di seguito il sorgente.
#include <stdio.h>
#include <stdlib.h>
int main() {
int numero;
int risultato;
printf("CALCOLO DEL FATTORIALE TRAMITE UNA FUNZIONE RICORSIVA");
printf("\n\nInserire un numero: ");
fflush(stdin);
scanf("%i", &numero);
printf("\n");
risultato=fattoriale(numero);
printf("\nRISULTATO");
printf("\nIl fattoriale di %i %c %i\n\n", numero, 138, risultato);
system("pause");
return 0;
}
int fattoriale(int numero) {
static int ricorsione=1;
static int parziale;
register int contatore;
if(ricorsione==1 && numero>0)
parziale=numero-1;
else if(ricorsione==1 && numero<0)
parziale=numero+1;
for(contatore=1;contatore<ricorsione;contatore++)
printf(" ");
printf("Questa %c la chiamata n. %i alla funzione \'fattoriale\'\n", 138, ricorsione);
for(contatore=1;contatore<ricorsione;contatore++)
printf(" ");
printf("Eseguo il passaggio: %i moltiplicato per %i, ", numero, parziale);
numero=parziale*numero;
if(parziale<0)
numero=-numero;
printf("che fa %i\n\n", numero);
if(parziale>0)
parziale--;
else
parziale++;
ricorsione++;
if(parziale!=0)
fattoriale(numero);
else
return numero;
}