Programma numero di nepero

di il
2 risposte

Programma numero di nepero

Buongiorno,
mi sono da un po' avviato al mondo c++ e ho pensato di provare a fare un programma che restituisse il numero di Nepero calcolato con gli sviluppi in serie di Taylor (1+1/1!+1/2!+1/3!...).
utilizzo code blocks e la libreria iostream, il compilatore non mi da errori ma quando eseguo il programma non scrive nulla e termina dicendo che il programma restituisce un numero lunghissimo. allora ho provato a scrivere la stessa cosa utilizzando la libreria stdio.h ma da lo stesso risultato. mi potete aiutare?
ecco il codice

#include <iostream>
#include <math.h>
using namespace std;
int fattoriale(int x) //definisco le funzione fattoriale in modo che si autorichiami
{
if (x==1)
{
return 1;
}
else{
return x*fattoriale(x-1);
}
}
int main()
{
float e=0;
for (int n=0;n!=20;n++)
{
e=e+1/fattoriale(n);
cout<<e<<endl; //faccio scrivere e ognni volta che riparte il ciclo per vedere il cambiamento di precisione
}
return 0;
}
grazie mille a chi risponderà

2 Risposte

  • Re: Programma numero di nepero

    Nel main, alla prima iterazione del ciclo for, stai passando 0 a fattoriale, e poiché 0 è diverso da 1, verrà chiamata ricorsivamente la funzione con -1, che a sua volta è diverso da 1 e si passa a -2 e così via. Però dopo un po' viene causato uno "stack overflow", perché ogni chiamata a funzione occupa memoria (finchè la funzione non termina) e il tuo programma crasha per questo.
    Quindi hai due soluzioni, o inizi il ciclo for con n=1 o usi la definizione matematica di fattoriale e metti "if(x==0) return 1;".
    Inoltre ti faccio notare che 13! fa circa 6 miliardi, che supera il massimo valore per gli interi con segno (che è circa 2 miliardi), quindi ti consiglio di usare i "long long int", anche se con la funzione fattoriale romperai presto anche i loro limiti.
  • Re: Programma numero di nepero

    Franzo ha scritto:


    Nel main, alla prima iterazione del ciclo for, stai passando 0 a fattoriale, e poiché 0 è diverso da 1, verrà chiamata ricorsivamente la funzione con -1, che a sua volta è diverso da 1 e si passa a -2 e così via. Però dopo un po' viene causato uno "stack overflow", perché ogni chiamata a funzione occupa memoria (finchè la funzione non termina) e il tuo programma crasha per questo.
    Quindi hai due soluzioni, o inizi il ciclo for con n=1 o usi la definizione matematica di fattoriale e metti "if(x==0) return 1;".
    Inoltre ti faccio notare che 13! fa circa 6 miliardi, che supera il massimo valore per gli interi con segno (che è circa 2 miliardi), quindi ti consiglio di usare i "long long int", anche se con la funzione fattoriale romperai presto anche i loro limiti.
    hai ragione non me ne ero accorto. è da poco che programmo e non sono ancora molto abituato. ora funziona, ho anche corretto le specifiche di conversione delle variabili come mi hai indicato. grazie mille
Devi accedere o registrarti per scrivere nel forum
2 risposte