Eulersche Zahl rekursiv

Gast #4045408
Lesenswert?
• ▲
▼
#include<iostream>
using namespace std;

Hallo liebe Informatikergemeinde :-)
Versuch grad ein Programm mit C++ zu schreiben, das die eulersche Zahl 
rekursiv berechnet. Leider wird mir überhaupt kein Ergebnis ausgespuckt. 
Sieht jemand den Fehler?
1
double fac(int n) {
2
  if(n=0)
3
    return 1;
4
  else
5
    return fac(n-1)*n;
6
}
7

8
double euler(int n) {
9
  if(n=0)
10
    return 1;
11
    else
12
    return (euler(n-1)+(1/fac(n)));
13
}
14

15
int main()
16
{
17
  int n;
18
  cout << "Gib n ein!" << endl;
19
  cin >> n;
20
  cout << euler(n) << endl;
21
}
LG
Gast #4046296
Lesenswert?
• ▲
▼
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
Moderator (Firma: Titel) Persönliche Seite #4046603
Lesenswert?
• ▲
▼
Dirk B. schrieb:
> 1. Von n=0 hat Nico nichts geschrieben.
Es ging aber um die Abfrage, die Albert schrieb:
> if(n=0)
Worauf Nico S. schrieb:
> Mit einem "=" führst du eine Zuweisung durch die (fast) immer wahr ist
Aber eben immer genau dann nicht, wenn eine 0 zugewiesen wird.

Könnte natürlich auch ein wenig Ironie oder Sarkasmus in dieser Aussage 
gewesen sein, das ist schwer zu erkennen...

In der finalen Summe gilt, was Albert schrieb:
> Super, jetzt funktioniert's. Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren