Wer kann mir diese for Schleife in Java Erklären (Fibonacci Zahlen Berechnung)? Siehe Foto?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Setze doch einfach einmal konkrete Zahlen in den Algorithmus ein:

// init
alt = 1
neu = 0

// loop 1
alt = 1 + 0 = 1
neu = 1 - 0 = 1
output: 1 1

// loop 2
alt = 1 + 1 = 2
neu = 2 - 1 = 1
output: 2 1

// loop 3
alt = 2 + 1 = 3
neu = 3 - 1 = 2
output: 3 2

// loop 4
alt = 3 + 2 = 5
neu = 5 - 2 = 3
output: 5 3

// loop 5
alt = 5 + 3 = 8
neu = 8 - 3 = 5
output: 8 5

// etc.

Je Schleifendurchlauf verändern sich insgesamt 3 Variablen: alt, neu und i. Letztere Variable dient als Zähler. Sie wird bei jedem Durchlauf um 1 erhöht, bis sie dem Wert 20 entspricht. Dann ist die Schleifenbedingung erfüllt und der Programmfluss springt aus dem Konstrukt heraus.

Des Weiteren wird die obige Berechnung durchgeführt, die sich auf alt und neu bezieht.

Laufvariable i soll nur alles 20 mal durchlaufen, also die Rekursion "Addition der beiden Vorgänger" 20 mal wiederholen.

Der Iterationsrechner zeigt das in nur 2 Zeilen:

http://www.gerdlamprecht.de/Roemisch_JAVA.htm#@P@Q5)*0.5+0.5,x)/@Q5)+@P@Q5)*0.5-0.5,x)*sin(PI*(x-0.5))/@Q5)@Na=0;b=1;IM=1;@Nb=b+a;a=b-a;@Bi]=b.toString()+'%20neu='+a.toString();@Ci]=Fx(i+2);aD[i]=round(Fx(i+1));@Ni%3E=19@N0@N0@N#

Bild zum Beitrag

Statt einer For-Schleife, die mit 1 beginnt, benutzt der Iterationsrechner immer eine Loop-Until-Schleife, die immer mit i=0 beginnt. Mit den Modi IM=...

kann man definieren, ob das i am Ende noch incrementiert werden darf oder nicht.

Mathematiker kennen jedoch schon über 100 Jahre die explizite Formel dieser Fibonacci-Funktion, mit der man auch reelle Zahlen berechnen kann. Da double Variablen nur etwa 15 Nachkommastellen genau sind, bietet sich die Rundungsfunktion mit an.

 - (Computer, Mathematik, programmieren)

I ist einfach nur ne Zähl Variable. Damit läuft die for schleife 20 mal durch. Sie muss nicht direkt den Impact auf die neu und alt variable haben. Diese variablen ändern sich nach jedem durchlauf und werden deswegen erhört. Daher funzt das ganze

Nichtsnutz12 
Beitragsersteller
 03.11.2018, 16:31

ah soo geht das ok danke und könnte man eigentlich die for schleife so einstellen das man zb nur das 18. mal ausgibt? also das 1-17 und 19-20 weggelassen wird zum Beispiel?

Nichtsnutz12 
Beitragsersteller
 03.11.2018, 17:00
@verreisterNutzer

hmm habs versucht es zählt trotzdem 18x mal auf

for (int i=101; i<=121; i=i+1)

i selbst hat keinen Einfluss auf die Berechnung. Hauptsache die Anzahl der "Schritte" passt.

wie wäre es mit

int steps = 20;
do {
   //do your stuff here
   steps--; //decrement steps
} while (steps > 0);

I wird um eins erhöht