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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.