Fibonacci Zahlen generieren mit C

Ich glaube ich habe das verstanden, aber wie setzt man das dann um? ohne dass der für jede zahl die zahlen davor auch ausrechnen muss.
 
Ich denke der Code ist wieder mal selbsterklärend.

C++:
#include <stdio.h>


int main ()

{
    printf("Wie viele Fibonacci Zahlen moechten Sie generieren?\n");
    int f_max; //Anzahl der Zahlen, die der Benutzer generieren möchte
    scanf("%i", &f_max); //einlesen...

    if(f_max <= 0){ //falls der Benutzer <= 0 eingibt, brich ab. Hier wäre eine Erweiterung zu den negativen Fibonaccizahlen denkbar?
        printf("Depp!");
        return 0;
    }
    if(f_max == 1){ //falls der Benutzer 1 eingibt: gib direkt 0 zurück.
        printf("1te fzahl: 0\n");
        return 0;
    }
    if(f_max == 2){ //falls der Benutzer 2 eingibt: gib direkt 0 und 1 zurück
        printf("1te fzahl: 0\n2te fzahl: 1\n");
        return 0;
    }
    //sonst fahre fort:

    //Startwerte festlegen
    unsigned long long Fzahl1 = 0; //axiomatisch
    unsigned long long Fzahl2 = 1; //axiomatisch
    unsigned long long Fzahl3;
    /* insgesamt braucht man nur 3 Variablen */

    //printe schonmal die ersten beiden
    printf("1te fzahl: 0\n2te fzahl: 1\n");

    for(int i = 2; i < f_max; ++i){ //iteriere nun von der 3. Fzahl bis zur gewünschten
        Fzahl3 = Fzahl1 + Fzahl2; //3. Zahl sei Summe aus den beiden davor
        Fzahl1 = Fzahl2; //shifte 2. Zahl zu 1. Zahl
        Fzahl2 = Fzahl3; //shifte 3. Zahl zu 2. Zahl
        /* damit ist der nächste Durchlauf der Schleife vorbereitet, da wir alle Zahlen um eine Stelle verschoben haben */
        printf("%ite fzahl: %llu\n", i+1, Fzahl2); //gib Fzahl2 aus (das ist die aktuelle Fzahl)
        /* Hinweis: (unsigned long long) ist groß, aber da die Folge schnell divergiert ist bei etwa i = 70 Schluss! */
    }

    return 0;
}

Im Grunde ist das was ich jetzt getan habe bloß, dass ich den Algorithmus etwas vereinfacht habe. Am Anfang kann das sehr undurchsichtig für dich sein, aber glaube mir die üblichen Vorgehensweisen werden sich nach und nach in dir festigen.

Bleib am Ball und hab Spaß!

Gruß Technipion
 
puh, verstanden :) und sieht echt gut aus. auf die idee mit den drei variablen wäre ich mit sicherheit nie gekommen.

Da du jetzt keine Unterfunktion drin hast, nehme ich an, dass wenn ich eine Unterfunktion reinmache, die immer je eine neue fibonacci zahl hochschickt. richtig? das was du vermeiden willst mit deinem programm
 
Du hast Recht, in dem Fall hier könnte studine 'int max' verwenden.
Aber damit er/sie später einen guten Programmierstil erhält, sollte man ihn/sie jetzt schon darauf aufmerksam machen, dass es bei solchen gängigen Stichwörtern wie max zu Komplikationen kommen kann.

So ist max z.B. eine Funktion in der Standardbibliothek:
http://en.cppreference.com/w/cpp/algorithm/max

Spätestens wenn man dann lokal das Standard-Namespace benutzt wird der Compiler verwirrt sein...

Grüße Technipion
 
Zurück