If / else - Erbitte Hilfe bei Klausurvorbereitung

Moin moin!

Ich stecke gerade in den Vorbereitungen zu einer Prüfung zu C++. Dabei komme ich immer wieder zu einem Aufgabenschema, dessen Lösung mir nicht klar ist. Es handelt sich z. B. um folgende Aufgabe:

http://www11.pic-upload.de/27.02.15/l4bv8tsjdzjp.jpgMein Gedankengang - der offensichtlich falsch ist - war:
Ausgabe von f(5) -> n ist 5.
Da 5 weder 0 noch 1 ist, geht es in den else-Zeiwg.
n-1 ist 4, n-2 ist 3, addiert ist das 7, also ist die Ausgabe 7.

Wo liegt mein Denkfehler, bzw. wie ist es richtig?

Danke für Eure Hilfe!

Gruß
Jan

Stichwort Rekursion (rekursive Aufrufe) (owt)
vermutlich solltest Du das mit Papier und Bleistift mal durchspielen…

ich lese das so

f(5) -> f(4)+f(3)
-> f(4) -> f(3)+f(2)
-> f(3) -> f(2)+f(1)

f(2) -> f(1) + f(0)
f(2) -> 1 + 0 = 1

f(1) -> 1
f(0) -> 0

alles einsetzen und ersetzen bis nur noch f1 und f0 übrig .
f(5) => f(1) + f(0)+f(1)+f(1) + f(0)+f(1) + f(0)+f(1)
f(5) => 1 + 0 + 1 + 1 + 0 + 1 + 0 + 1 = 1+1+1+1+1 = 5

Damit sieht das Ganze ja jetzt schon anders aus. :smiley:

Danke für Eure schnelle Hilfe, dann sollte das ja kein Problem mehr darstellen!

Ich habe mir nun die anderen Aufgaben auch noch einmal angesehen, meine Lösungen stehen zumindest in den Antwortmöglichkeiten. Würde mich freuen, wenn da noch jemand einmal drübersehen würde.Diese hier fande ich ziemlich verzwickt, weil da zig Vorzeichenwechsel drin sind, wenn man sie später auswerten möchte. Mein Ergebnis wren hier +5: http://www11.pic-upload.de/27.02.15/jusseoi23yhh.jpgUnd hier eine doppelte Verschachtelung, wo ich 8 herausbekomme: http://www11.pic-upload.de/27.02.15/apcbeho965zx.jpg (innere Funktion f(3) erzeugt viermal die Ausgabe und gibt den Wert 3 aus, die äußere Funktion ist somit ebenfalls f(3) und gibt die Ausgabe weitere vier Male aus.)

Danke für Eure Unterstützung!

Schönen Gruß von Herrn Fibonacci
So wie die Rekursion ein netter Kniff ist, so kann man auch bei der Anwendungen noch einen Trick anwenden und sich die Zwischenergebnisse notieren.

Jede Anwendung der rekursiven Funktion erzwingt ja, dass Du die Funktionswerte der nächstkleineren Zahlen benötigst. Setze also nicht wiederholt große Zahlen in die Formel ein, sondern notiere Dir die Ergebnisse von 0 an in eine Tabelle.

f(0) = 0
f(1) = 1
f(2) = f(0) + f(1) = 1
f(3) = f(1) + f(2) = 2
f(4) = …

Sieht am Ende fast so aus, wie die bekannteste Zahlenfolge.

Mit Programmierung hat das nur in so weit zu tun, also man auch bei der Implementierung rekursiver Funktionen so verfährt.

Ciao, Allesquatsch

Ja, das ist eine gute Idee, werde ich so machen, danke!