2016-05-06 3 views
1

Я занимаюсь различными темами и языками на эту тему, но, похоже, я не нашел решение для установки бара для последовательности фибоначчи, чтобы остановиться ниже 100 с помощью цикла do while в Javascript.Последовательность Fibonacci Javascript do while loop

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); 

По какой-то причине приведенный выше код работает только один раз. Что мне следует задать для условия while, чтобы сохранить результат печати до тех пор, пока он не достигнет ближайшего значения до 100?

+2

Вы, конечно, имел в виду 'я ++,' вместо 'fbnci [я] ++;'? И, конечно, ваше условие петли необходимо адаптировать. – Bergi

+1

Я думаю, что вы хотели увеличивать 'i' не' fbnci [i] ' – Jamiec

+0

Не имеет значения, используете ли вы здесь цикл' do while' или normal 'while'. Идите к простому. – Bergi

ответ

2

У вас ошибка в коде, оно должно быть:

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); 

Решение, которое печатает все числа Фибо, которые ниже, чем макс.

+0

Это все еще не работает. Пожалуйста, попробуйте код перед публикацией. – Bergi

+0

ах, ты прав, чек после :), глупая ошибка - исправлено, спасибо @Bergi – PolishDeveloper

+0

Он по-прежнему печатает прошлое 100 (заканчивается на 144), почему? – HGB

1

Для меня это бесконечный цикл, который продолжает распечатывания 1. Вы должны увеличивать I вместо приращением fbnci [я]:

i++ вместо fbnci[i] ++

Кроме того, вы будете по-прежнему не условие while, так как вы проверяете значение nil. Вы хотите, чтобы изменить время, чтобы проверить fbnci [я-1]:

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

+1

Это еще не сделает код работать. – Bergi

+1

@ Bergi, вы правы, я сделал изменения –

+0

хороший ловец @Bergi, все сосредоточились на инкрементальности, но никто не думал о проверке. – PolishDeveloper

-1

Петля происходит только один раз, потому что к тому времени, i=3, ваше состояние в то время не в состоянии проверить, если fbci[3] < 100 так fbnci[3] является undefined.

Вы можете сделать это вместо того, чтобы

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

console.log(fbnci); 
+0

Таким образом, в этом случае нельзя использовать цикл while? – HGB

+0

вы можете сделать это через цикл или функции. Функции имеют больший объем памяти, потому что вам необходимо сохранить стек. Петли немного сложнее реализовать, но это возможно. – PolishDeveloper

+0

Циклы также имеют область памяти, так как ваш массив фибоначчи по существу является справочной таблицей. –