Unverständliche for-Schleife
-
Hallo,
ich bin gerade dabei c++ zu erlernen und habe bisher alles sehr gut verstanden (Ich lerne von einem Buch "c++ in 21 Tagen). Nun bin ich beim Kapitel 7 angekommen "Schleifen". Die while Schleifen waren sehr gut beschrieben und verständlich ebenfalls die anfänglichen Beispiele der for-Schleifen. Nun kommt aber ein Beispiel einer For-Schleife das ich nicht verstehe. Und zwar:
#include <iostream.h> int fib(int position); int main() { int answer, position; cout << "Welche Position? "; cin >> position; cout << "\n"; answer = fib(position); cout << answer << " lautet der Wert der "; cout << position << "ten Fibonacci-Zahl.\n"; return 0; } int fib(int n) { int minusTwo=1, minusOne=1, answer=2; if (n < 3) return 1; for (n -= 3; n; n--) { minusTwo = minusOne; minusOne = answer; answer = minusOne + minusTwo; } return answer; }ich verstehe soweit alles bis zum Schritt "answer = fib(position);". Unten wird dese ja Definiert nur wie rechnet die Funktion die Antwort aus sprich "answer". Wieso dekrementiert er n mit 3 und in der for-Schleife selber ergibt "minusOne + minusTwo" doch immer 3. Bitte um eine Erklärung für "Dumme".
Vielen Dank
-
Das ist kein Problem der For-Schleife.
Du solltest dich mal nach der iterativen Implementierung des Fibonacci-Algorithmus umschauen.
-
Hi,
Also erstmal ist das neuerdings (seit fast nem Jahrzehnet) iostream statt iostream.h. Dafür benötigst Du noch using namespace std; bzw. std:: vor allem, was du durch iostream nutzt.
und minusOne + minusTwo ist nicht immer 3, nur beim ersten Mal. Im zweiten Schleifendurchlauf sind ja minusTwo, minusOne und answer verändert, sodass die gleiche Berechnung zu einem anderen Ergebnis führt.
Die for-Schleife funktioniert so:
- Am Anfang wird n um 3 dekrementiert, dies geschieht nur ein einziges Mal
- Die Bedingung, dass die Schleife weiterläuft, ist n; das entspricht "n != 0"
- Nach jedem Schleifendurchlauf wird n um 1 dekrementiertDie Schleife wird also für n=3 0 Mal durchlaufen (da zuerst n -= 3 geschieht und daraufhin n ja 0 ist und das durch die Überprüfung falsch ist). Für n=4 wird sie einmal durchlaufen, da nach Initialsetzung von n = n-3 n erstmal 1 ist und einmal durchlaufen wird, danach dekrementiert und, da das n dann 0 ist, wieder rausläuft. Für n = 4 dann zwei Durchläufe usw. usf.
-
Stimmt ist ja logisch das sich die Zahlen verändern, ich hoffe ich bin nicht der dümmste (-;.
Danke
-
Das hat nichts mit Dummheit sondern fehlender Gewohnheit an die Notation zu tun imo.