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 dekrementiert

    Die 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.



  • @Eisflamme

    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.


Anmelden zum Antworten