Rekursion
-
HI,
Warum bekomm ich hier keine Ausgabe ?
#include <iostream> using namespace std; int fak (int n) { if(n<=1) return 1; return n*fak(n-1)+ fak(n+2); } void main(void){ cout<<fak(2); }
-
blurry33 schrieb:
HI,
Warum bekomm ich hier keine Ausgabe ?
#include <iostream> using namespace std; int fak (int n) { if(n<=1) return 1; return n*fak(n-1)+ fak(n+2); } void main(void){ cout<<fak(2); }Sollte es nicht fak(n-2) heißen? :xmas1:
-
ich weiß dass man die FAkultät mit n * fak(n-1) berechnet,
aber jetzt wollte ich noch + fak(n+2) ergänzen.
eigentlich sollte er die Fakultät von fak(2)+fak(4) als Addition zurückliefern
-
Und jetzt denk mal weiter. Wie berechnet er fak(4)?
-
Hier hat jemand das selbe Problem mit Rekursion: http://www.c-plusplus.net/forum/viewtopic-var-t-is-256033-and-highlight-is-.html
-
#include <iostream> using namespace std; int fak (int n) { if(n<=1) return 1; return n*fak(n-1)+ n*fak(n-1); } void main(void){ cout<<fak(4); //Ausgabe 192 }Ich versteh gar nichts mehr. Warum gibt die Funktion 192 zurück ?
-
ich weiß jetzt woher das Ergebnis stammt.
Werd mir das ganze nochmal anschaun und bei Unklarheiten noch mal fragen.
-
blurry33 schrieb:
Ich versteh gar nichts mehr. Warum gibt die Funktion 192 zurück ?
Gehen wir doch mal Schritt für Schritt durch:
1) Aufruf: fak(4) gibt zurück: fak(4) = 4*fak(3) + 4*fak(3) 2) Aufruf: fak(3) gibt zurück: fak(3) = 3*fak(2) + 3*fak(2) 3) Aufruf: fak(2) gibt zurück: fak(2) = 2*fak(1) + 2*fak(1) 4) Aufruf: fak(1) gibt zurück: fak(1) = 1 5) 4) in 3) einsetzen: gibt zurück: fak(2) = 2*1 + 2*1 = 4 6) 3) in 2) einsetzen: gibt zurück: fak(3) = 3*4 + 3*4 = 24 7) 2) in 1) einsetzen: gibt zurück: fak(4) = 4*24 + 4*24 = 192Jetzt sollte dir auch klar sein, woher dein Fehler kommt. :xmas2:
-
Danke SeppJ nochmal

Die Erklärung hat nochmal zum Verständnis beigetragen

-
volkard schrieb:
Hier hat jemand das selbe Problem mit Rekursion: http://www.c-plusplus.net/forum/viewtopic-var-t-is-256033-and-highlight-is-.html
Sehr schön
