Fibonacci



  • Hi Hulio19,

    Die gewollte Fibonaccizahl erhält man, indem man die vorvorherige und die vorherige Zahl addiert. Die erste Fibonaccizahl ist 0, also -1 + 1.
    Nach jedem Durchgang musst du fvorvor und fvor aktualisieren, fvorvor = fvor und fvor = f.

    Voilà:

    #include <stdio.h>
    
    int main () {
    	int fvorvor = -1, fvor = 1, i = 0, f = 0;
    	/* gibt die ersten 10 Fibonaccizahlen aus */
    	for (i = 0; i < 10; i++) {
    		f = fvorvor + fvor;
    		printf("%i\n", f);
    		fvorvor = fvor;
    		fvor = f;
    	}
        return 0;
    }
    

    Gez. monstermunchkin



  • monstermunchkin schrieb:

    Die gewollte Fibonaccizahl erhält man, indem man die vorvorherige und die vorherige Zahl addiert. Die erste Fibonaccizahl ist 0, also -1 + 1.

    Was heißt hier: "also -1 + 1"?
    Die vorherige Zahl von 0 ausgesehen ist zwar -1, aber die vorvorherige ist nicht 1 ...



  • Belli schrieb:

    Was heißt hier: "also -1 + 1"?
    Die vorherige Zahl von 0 ausgesehen ist zwar -1, aber die vorvorherige ist nicht 1 ...

    Dass die vorvorherige Zahl von 0 nicht 1 ist, ist mir schon bewusst. Aber um die Fibonaccireihenfolge zu erhalten muss man fvorvor mit -1 und fvor mit 1 initialiseren.
    Ich weiß jetzt nicht genau worauf du eigentlich hinaus möchtest.



  • Belli schrieb:

    Was heißt hier: "also -1 + 1"?
    Die vorherige Zahl von 0 ausgesehen ist zwar -1, aber die vorvorherige ist nicht 1 ...

    Ja, andersrum. Die vorherige ist 1, die vorvorherige ist -1. Mit diesen Anfangsbedingungen bekommst du eine Folge, die ab dem 3. Glied mit der Fibonacci-Folge übereinstimmt.



  • Bashar schrieb:

    Mit diesen Anfangsbedingungen bekommst du eine Folge, die ab dem 3. Glied mit der Fibonacci-Folge übereinstimmt.

    Die Fibonacci-Folge stimmt doch schon ab dem 1. Glied überein: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

    Also ich sehe in dem Code absolut kein Problem.



  • Dein Code setzt diese Rekursionsvorschrift um:

    a0=1a_0 = -1

    a1=1a_1 = 1

    a_n=a_n1+an2(n2)a\_n = a\_{n-1} + a_{n-2}\quad(n\geq 2)

    Halt wie Fibonacci, bloß mit anderen Anfangsgliedern. Die echte Fibonacci-Folge ergibt sich ab $$a_2$$, und nur diesen Teil gibst du aus.



  • Bashar schrieb:

    Dein Code setzt diese Rekursionsvorschrift um:

    a0=1a_0 = -1

    a1=1a_1 = 1

    a_n=a_n1+an2(n2)a\_n = a\_{n-1} + a_{n-2}\quad(n\geq 2)

    Da hast du wohl Recht, die rekursive Bildungsvorschrift hab ich geändert.

    Als Hilfe wurden dem Fragesteller jedoch fvorvor = -1 und fvor = 1 gegeben, und danach hab' ich mich gerichtet 🙂



  • Vielen Dank euch alle! 👍



  • [quote="monstermunchkin"]

    Belli schrieb:

    Ich weiß jetzt nicht genau worauf du eigentlich hinaus möchtest.

    Daß Deine Erklärung und die Schlussfolgerung, wie man zur Fibonacci-Zahl 0 kommt, nicht zusammenpassen.
    Soweit ich mich erinnere, sind 0 und 1 per Definition Fibonacci-Zahlen, die Bildungsregel 'vorherige + vorvorherige' gilt erst ab der nächsten.



  • Hulio19 schrieb:

    Als Hilfe wurde mir gegeben:
    int forvor= -1, fvor = 1

    Davon ging ich aus. Damit hab' ich dann auch die 0 und die erste 1 ermittelt, die laut Definition eigentlich vorgegeben sind.

    Belli schrieb:

    Soweit ich mich erinnere, sind 0 und 1 per Definition Fibonacci-Zahlen, die Bildungsregel 'vorherige + vorvorherige' gilt erst ab der nächsten.

    Das stimmt, ja. Laut Definition ist mein Code nicht (ganz) korrekt.



  • monstermunchkin schrieb:

    Das stimmt, ja. Laut Definition ist mein Code nicht (ganz) korrekt.

    Mhm ... ich würde sagen, der Code ist korrekt, solange er das richtige Ergebnis ausspuckt ...


Anmelden zum Antworten