2016-05-06 10 views
1

Ich habe verschiedene Threads und Sprachen zu diesem Thema durch, aber ich finde keine Lösung zum Festlegen einer Leiste für eine Fibonacci-Sequenz unter 100 mit einer do while Schleife in Javascript zu stoppen.Fibonacci Sequenz Javascript tun while-Schleife

var fbnci = [0, 1]; 
var i = 2; 

do { 
    // Add the fibonacci sequence: add previous to one before previous 
    fbnci[i] = fbnci [i-2] + fbnci[i-1]; 
    console.log(fbnci[i]); 
    fbnci[i]++; 
} 
while (fbnci[i] < 100); 

Aus irgendeinem Grund wird der obige Code nur einmal ausgeführt. Wofür sollte ich while setzen, um das Ergebnis weiter zu drucken, bis es den nächsten Wert von 100 erreicht?

+2

Sie sicher gemeint 'i ++;' statt 'fbnci [i] ++;'? Und natürlich muss Ihre Looping-Bedingung angepasst werden. – Bergi

+1

Ich denke, du wolltest "i'nicht' fbnci [i] 'inkrementieren" – Jamiec

+0

Es macht keinen großen Unterschied, ob du hier eine 'do while'- oder normale' while'-Schleife verwendest. Geh für das Einfache. – Bergi

Antwort

2

Sie haben einen Fehler im Code haben, sollte es sein:

var fbnci = [0, 1], max = 100, index = 1, next; 
do { 
    index++; 
    next = fbnci[index-2] + fbnci[index-1]; 
    if (next <= max) { 
     console.log(next); 
     fbnci[index] = next; 
    } 
} while(next < max); 

Lösung, die alle fib Zahlen druckt, die niedriger als max sind.

+0

Das funktioniert immer noch nicht. Bitte versuchen Sie Ihren Code vor dem Posten. – Bergi

+0

ah, du hast Recht, check ist nach :), Dummer Fehler - behoben, danke @Bergi – PolishDeveloper

+0

Es druckt immer noch über 100 (Ende bei 144) Warum ist das? – HGB

1

Für mich ist es eine unendliche Schleife, die 1. Sie müssen den Ausdruck hält i zu erhöhen, statt fbnci des Inkrementierens [i]:

i++ statt fbnci[i] ++

Zusätzlich werden Sie noch scheitern Die while-Bedingung, da Sie einen Nullwert überprüfen. Sie wollen Ihre während sich ändern fbnci zu überprüfen [i-1]:

} while(fbnci[i-1]<100);

+1

Das wird immer noch nicht den Code arbeiten. – Bergi

+1

@Bergi du hast Recht, ich machte Bearbeitungen –

+0

guten Fang @Bergi, jeder konzentrierte sich auf incrementing aber niemand dachte an die Weile zu überprüfen. – PolishDeveloper

-1

Die Schleife nur einmal tritt auf, weil durch die Zeit i=3, Ihre während Zustand nicht in der Lage ist zu prüfen, ob fbci[3] < 100 seit fbnci[3] ist undefined.

Sie können dies tun, anstatt

var fbnci = [0, 1]; 
var i = 1; 
while(fbnci[i] < 100) { 
    fbnci.push(fbnci[i] + fbnci[i-1]); 
    i++; 
} 

console.log(fbnci); 
+0

Also ist es in diesem Fall nicht möglich eine While-Schleife zu benutzen? – HGB

+0

können Sie es über Schleife oder Funktionen tun. Funktionen haben einen höheren Speicherbedarf, da Sie den Stack beibehalten müssen. Loops sind etwas komplizierter zu implementieren, aber es ist möglich. – PolishDeveloper

+0

Schleifen haben auch einen Speicherbedarf, da Ihr Fibonacci-Array im Wesentlichen eine Nachschlagetabelle ist. –