Abgesehen von dem "=="-Fehler, der ja schon aufgezeigt wurde, ist das
Programm in Bezug auf Datentypen eine reine "Konvertierungskatastrophe".
Auf einem PC (wo es ja schließlich eine FPU gibt), ist es wesentlich
effizienter, sich die ständige Umwandlung zwischen int und double zu
sparen und nur mit double zu arbeiten. Um das Problem der Identitäten
von double-Zahlen zu umgehen, kann man "if (n < 1.0)..." schreiben:
1 | #include <iostream>
|
2 |
|
3 | using namespace std;
|
4 |
|
5 | double fac(double n) {
|
6 | if(n < 1.0)
|
7 | return 1.0;
|
8 | else
|
9 | return fac(n - 1.0) * n;
|
10 | }
|
11 |
|
12 | double euler(double n) {
|
13 | if(n < 1.0)
|
14 | return 1.0;
|
15 | else
|
16 | return (euler(n - 1.0) + (1.0 / fac(n)));
|
17 | }
|
18 |
|
19 | int main()
|
20 | {
|
21 | double n;
|
22 | cout << "Gib n ein!" << endl;
|
23 | cin >> n;
|
24 | cout << euler(n) << endl;
|
25 | }
|
Herbschi