Denkfehler Rekursion

James15225

Mitglied
Mein Problem ist, dass ich die Rekursion bei den Fibonacci Zahlen nicht verstehe. Also der Code wäre ja:
Java:
public static long fib(int n) {
   if(n == 0) {
     return 0;
   } else if (n == 1) {
     return 1;
   } else {
      return fib(n-1) + fib(n-2);
   }
}
Jetzt verstehe ich aber nicht, wie der Computer rechnet. Die sechste Fibonacci Zahl ist 8. Doch eigentlich müsste der Computer ja 5+4 rechnen und sich dann immer neu aufrufen. Also: 7+6+6+5+5+4+4+3+3+2+2+1+1+0. Also insgesamt: 49. Trotzdem kommt als Ergebnis 8 heraus. Wie rechnet der PC das? Wo ist mein Denkfehler? Und steigt der PC nach dem Return wieder am Anfang der Methode ein, oder an der selben Stelle, an der er auch ausgestiegen ist?
 

CodeGirl

Mitglied
Hi du,

der Aufruf von fib(2) ruft zb. fib(2-1)+fib(2-2) auf.
fib(2-1) liefert dabei 1, fib(2-2) liefert 0. Es wird also 1+0 = 1 gerechnet.

Für fib(3) wird fib(2) und fib(1) aufgerufen. Das heisst es werden die Ergebnisse der beiden Aufrufe wieder addiert, also 1+1=2.

Für fib(4) wird dann fib(3) mit fib(2) addiert, also 2+1 =3.

Ich hoffe das hilft dir,
lg
 

James15225

Mitglied
Also ist folgende Rechnung richtig: fib(3) würde fib(2) und fib(1) liefern. fib(1) würde dann 1 zurückgeben und fib(2) würde fib(1) und fib(0) liefern. fib(1) würde dann ebenfalls 1 zurückgeben und fib(0)=0, aber dann hätte ich ja 1+1+0, also 2.
 

CodeGirl

Mitglied
fib(0) = 0
fib(1) = 1
fib(2) = fib(1)+ fib(0) = 1+0=1
fib(3) = fib(2)+ fib(1) = 1+1=2
fib(4) = fib(3)+ fib(2) = 2+1=3, da (1+1)+(1+0)

Du musst die Ergebnisse eigentlich nur einsetzen, oder eben die Formel, die zum Ergebnis führt...
 

James15225

Mitglied
Vielen Dank. Ich hab es endlich verstanden. Bei fib(5) hätte man quasi: fib(4)=fib(3)+fib(2)=fib(2)+fib(1)+fib(1)+fib(0)=fib(1)+fib(0)+fib(1)+fib(1)+fib(0)=3
und
fib(3)=fib(2)+fib(1)=fib(1)+fib(0)+fib(1)=2
Also insgesamt 5
Es wird also immer so lange reduziert bis überall fib(1) oder fib(0) steht und dann addiert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Präkrement Denkfehler Allgemeine Java-Themen 18
M Logikproblem bzw. Denkfehler Allgemeine Java-Themen 5
Thallius App-Sprache in der App ändern. Wo ist mein Denkfehler? Allgemeine Java-Themen 6
M Normalized Iteration count funktioniert nicht. Wo ist mien Denkfehler? Allgemeine Java-Themen 6
D Rot-Schwart-Baum denkfehler im code? Allgemeine Java-Themen 6
O NullPointerException (wohl Denkfehler) Allgemeine Java-Themen 5
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
C Bilder rotieren, Denkfehler in der Berechnung? Allgemeine Java-Themen 2
V Hm Denkfehler? oder was stimmt da nicht? Allgemeine Java-Themen 2
I Denkfehler bei Interfaces und Casts? Allgemeine Java-Themen 12
B Zugriff auf Methoden unter JNI (Denkfehler?) Allgemeine Java-Themen 6
P Rekursion Aufrufbaum Allgemeine Java-Themen 7
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
Zeppi Rekursion StackOverflowError Allgemeine Java-Themen 4
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
B Rekursion Allgemeine Java-Themen 11
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
L Rekursion Binärbaum Allgemeine Java-Themen 7
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
Weiti Swingworker und Rekursion Allgemeine Java-Themen 8
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben