fishbone: Java-Rekursion Verständnis

Beitrag lesen

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