Ich verstehe es einfach nicht. 0 1 1 2 krieg ich ja noch raus, aber wie kommt der nun auf 3 5 8 13 ..
Ich kann dem irgendwie nicht folgen, deshalb bitte ich um Hilfe. Danke euch.
Java:
publicclassAufg6{publicstaticvoidmain(String[]args){int n =8;for(int i=0;i<n;++i){System.out.print(doit(i)+" ");}}publicstaticlongdoit(long n){return(n<2)? n :doit(n-1)+doit(n-2);}}
Liegt dein Verständnis-Problem eventuell einfach nur am conditional operator? Die Methode doit kann man umschreiben:
Code:
public static long doit(long n){
// Abbruchbedingung der Rekursion
if (n<2) return n;
// Rekursive Berechnung
return doit(n-1) + doit(n-2);
}
Habe sogar noch zwei Kommentare hinzugefügt, damit dieser Standard-Aufbau einer Rekursion erläutert wird mit Abbruchbedingung und der eigentlichen rekursiven Berechnung.
Liegt dein Verständnis-Problem eventuell einfach nur am conditional operator? Die Methode doit kann man umschreiben:
Code:
public static long doit(long n){
// Abbruchbedingung der Rekursion
if (n<2) return n;
// Rekursive Berechnung
return doit(n-1) + doit(n-2);
}
Habe sogar noch zwei Kommentare hinzugefügt, damit dieser Standard-Aufbau einer Rekursion erläutert wird mit Abbruchbedingung und der eigentlichen rekursiven Berechnung.
Nein, ich hätte gern die einzelnen schritte, was da genau passiert. Das mit dem operator und das es rekursiv ist, damit ist kein Problem.
Ich kann nicht nachvollziehen, wie man auf 13 kommt.
publicclassRecDemo{publicstaticint x =0;//<<<publicstaticvoidmain(String[] args){int n =8;for(int i =0; i < n;++i){System.out.print(doit(i)+" ");}}publicstaticlongdoit(long n){System.out.println("Here Nr.: "+ x);//<<<
x++;return(n <2)? n :doit(n -1)+doit(n -2);}}
@Meniskusschaden Das stimmt schon. Wie hier jedoch der Fall, wird es ab der Zahl 5 sehr unübersichtlich und wenn man weiß, wie man sich hilft, ist es doch schon eine Ecke leichter zu verstehen.
Bei 5 geht es noch ganz gut, aber darüber hinaus würde ich auch langsam die Lust verlieren. Um das Prinzip zu verinnerlichen, finde ich es aber trotzdem sinnvoll, es mal aufzuschreiben.
Für eine Visualisierung der Rekursion könnte man das Programm noch leicht abwandeln. Folgendes Programm:
Java:
publicclassFibonacci{publicstaticvoidmain(String[] args){doit(5,0);}privatestaticlongdoit(long n,int level){print("doit("+ n +")", level);long result = n<2? n :doit(n-1, level+1)+doit(n-2, level+1);print("return "+ result, level);return result;}publicstaticvoidprint(String text,int level){for(int i=0; i<level; i++){System.out.print('.');}System.out.println(text);}}