Hi Vinzenz, vielen Dank für die schnelle und vorallem ausführliche Antwort ;)
"Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen."
Ich gebe mein Bestes ;)
public class Rekursion {
ein schlechter Klassenname ;-) Fibonacci wäre passender, auch wenn sie fehlerhaft implementiert ist.
War nur eine Klausuraufgabe von unserem Proff.
public static void main(String[] args) {
for (int i=0; i<7; i+=2)
System.out.println(f(i)+"");
}// fehlerhafte Methode
public static int f(int x) {
if (x<1) return 1;
return f(x-1) + f(x-2);}
}
[..]
f(2): Im ersten Durchlauf: Aufruf von f(1) und f(0)
im zweiten Durchlauf für f(1): Aufruf von f(0) und f(-1)
im dritten Durchlauf für f(0): 1
im dritten Durchlauf für f(-1): 1
im zweiten Durchlauf für f(0): 1
Das Ergebnis ist:
1
3
8
21
Die Methode "f" ruft sich ja immer wieder selber auf. D.h., wenn die Bedigung "if (x<1) return 1;" zutrifft, gibt er am Ende nicht 1 zurück, sondern die Zahl, wie oft die Methode aufgerufen wurde ne.
Bei deinem Schema oben hätte er die Methode 3 mal aufgerufen. Dann passt es auch mit der Ausgabe. Bei f(4) dürfte er er dann wohl die Methode 8 mal durchlaufen. f(x-1) und f(x-2) natürlich gesondert betrachtet und zusammengezählt.
Hoffentlich hab ich es nun gerafft ;)
Grüße