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
Na dann wirst Du sie wohl etwas auflösen müssen, damit C etwas damit anfangen kann. Immerhin steckt da so eine Art While-Schleife in der Formel http://de.wikipedia.org/wiki/Eulersche_Zahl PS. Dozentin: Frau Kothe?
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. :-(
?? 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?
Ja richtig. Wir sollen es als Reihe entwickeln. Nur diese Entwicklung soll halt rekursive sein. Sprich die Funktion zur Berechnung ruft sich immer wieder selber auf.
<< 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.
Sie soll es doch rekursiv machen, also keine Schleife. Ist in C
natürlich nur zu akademischen zwecken sinnvoll, aber naja.
> else{ return (e_rek(n) + 1.0/fak(n));}
Müsste e_rek(n-1) heißen, sonst bekommst du Endlosrekursion.
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
Du vergisst das 1/1 in der Reihe:
Ändere if(n ==1) zu if(n == 0), dann passt's.
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.
Das Ganze als rekursive Funktion zu schreiben ist von hinten durch die Brust ins Auge; bei der iterativen Realisierung ist es sofort offensichtlich wie man sich die Nennerberechnung erleichtern kann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.