e rekursive berechnen

Gast #517463
Lesenswert?

Hallo Zusammen.

Ich brauche zur Prüfungsvorbereitung ein c+ Programm, dass e rekursive 
berechnet.
Bis jetzt habe ich:

double e_rek (int n)
{
  if(n ==1)
  {return 1;}
  else{  return (e_rek(n) + 1.0/fak(n));}
}

die Funktion fak(n) berechnet die Fakultät von n. Sie funktioniert.
Aber für e kommt immer das falsche heraus. :-(

Ich hoffe ihr könnt mir helfen.
Lena
Gast #517477
Lesenswert?

Hi
Auf der Seite war ich schon.
Ich habe je versucht, die Reihenformel in C umzusetzen.
Das dumme ist nur, dass mein Prof. die Lösung gerne rekursive haben 
möchte.
Und leider funktioniert mein Programm nicht.

int fak(int n)
{
if (n == 0 || n == 1)
return 1;
return (fak(n-1)*n);
}

  double e_rek (int n)
{
  //return ( rekursivBiKo((n-1),k)+ rekursivBiKo ((n-1),(k-1)));
  if(n ==1)
  {return 1;}
  else{  return (e_rek(n) + 1.0/fak(n));}
}

Brauche echt Hife, morgen ist die Klausur. :-(
Gast #517484
Lesenswert?

??
Ich komme noch nicht ganz darauf was Du meinst.
In der Regl ist es so dass die Eulerzahl anhand einer Reihe berechnet 
wird. Wenn Ich Deinen Ansatz richtig deute sollst Du die Euler-Zahl bis 
zur n-ten Reihe berechnen, also er gibt n= 5 vor und dann wird eben 
aufsummiert bis 1/5!
Habe ich das richtig verstanden?
Gast #517499
Lesenswert?

<< Sprich die Funktion zur
Berechnung ruft sich immer wieder selber auf. >>
Nun gut. Das ist überschaubar und macht Sinn
Die Anzahl der Aufrufe wird vorgegeben == n
Dann beginnst Du eine Schleife die von 1 an die Variable y hochzählt, 
bis n erreicht ist.
Und y dient Dir gleich für die Fakultät also     temp = fak(y).
Das Ergbenis in seinen Kerwehrt wandeln    ergebnis = 1/temp.
und dann der Eulerzahl, die in der Initialisierung mit 1 geladen wurde
int Eulerzahl = 1;
hinzuaddieren  Eulerzahl = Eulerzahl + ergebnis;
Die Schleife ist zu ende, wenn y == n ist.
Gast #517552
Lesenswert?

Danke erstmal für eure Hilfe.
Leider klappt es immer noch nicht
Mein Code sieht nun so aus:

int fak(int n)
{
if (n == 0 || n == 1)
return 1;
return (fak(n-1)*n);
}

  double e_rek (int n)
{
  if(n ==1)
  {return 1;}
  else{  return (e_rek(n-1) + 1.0/fak(n));}
}

es gibt zwar keine Fehler mehr, aber das Ergebnis ist sehr weit von e 
entfernt
Gast #517772
Lesenswert?

Richtig schön anspruchsvoll ist es, den Nenner als doppelte Rekursion 
zwischenzuspeichern, sodaß man nicht immer den Nenner neu berechnen 
muss, sondern nur den neuen Teiler hinzumultipliziert. Das Ding läuft 
als pipeline in Form eines Testprogrammes auf einem Altera FPGA. Ist 
sauschnellt und rechnet in Windeseile auf X-Stellen herunter.

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