Calcolo Fattoriale iterativo e ricorsivo: fatto curioso...

di il
4 risposte

Calcolo Fattoriale iterativo e ricorsivo: fatto curioso...

Salve a tutti, mi sto avvicinando al mondo del C e vorrei porre a voi esperti un piccolo problema.
Ho scritto un programmino che richiede un numero da tastiera e ne calcola il fattoriale prima attraverso il metodo di iterazione e successivamente attraverso la ricorsione.

Il programma funziona abbastanza bene, l'unico fatto curioso è che superato un certo numero i valori calcolati tra iterazione e ricorsione differiscono da una certa cifra in poi.
Vorrei capire a cosa è dovuto, allego sotto esempio errore e codice sorgente. Grazie a tutti

Esempio da terminale:

**** Calcolo Fattoriale ****

Inserisci il numero del quale calcolare il fattoriale: 56

Iterativo -> Il Fattoriale di 56 è:
710998587804863451797683179691464326875337907723689145398690766266220675072
Ricorsivo -> Il Fattoriale di 56 è:
710998587804863451748643322383755883407870802854879251522891114356345405440

Tutto Fatto!!!


#include <stdio.h>

long double fattorialeIterativo(int);
long double fattorialeRicorsivo(int);

main()
{
	int dim;
	system("clear");
	printf("**** Calcolo Fattoriale ****\n\n");
	printf("Inserisci il numero del quale calcolare il fattoriale:  ");
	scanf("%d", &dim);
	printf("\nIterativo -> Il Fattoriale di %d è:  %.0Lf", dim, fattorialeIterativo(dim));
	printf("\nRicorsivo -> Il Fattoriale di %d è:  %.0Lf", dim, fattorialeRicorsivo(dim));
	printf("\n\nTutto Fatto!!!\n\n\n");
	return 0;
}

long double fattorialeIterativo(int dim){
	long double fatt = 1;
	int i;
	if(dim != 0)
		for(i=dim; i>0; i--)
			fatt *= i;
	return fatt;
}

long double fattorialeRicorsivo(int dim){
	long double fatt = 1;
	if(dim == 0)
		return fatt;
	else
		fatt *= dim;
	return fatt * fattorialeRicorsivo(dim-1);
}
Se provate a compilare noterete che con valori bassi sino a 30 credo l'algoritmo funziona alla grande, poi comincia a sballare. Grazie ancora

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte