@DarCKoder

Что пошло не так(простая задача)?

function fibonachi(limit) {
    var fibNums = [1, 2];

    while(true) {
        var newFib = fibNums[ fibNums.length - 1 ] + fibNums[ fibNums.length - 2 ];

        if(newFib % 2 == 1) {
            continue;
        }

        if(newFib < limit) {
            console.log(newFib % 2);
            fibNums.push(newFib);
            continue;
        }
        break;
    }

    return fibNums;
}

console.log( fibonachi(20) );


Без условия на четность, всё работает отлично. Но с проверкой на чётность, как в примере выше:
if(newFib % 2 == 1) {
            continue;
        }

, цикл не останавливается.
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
При первом вычислении newFib принимает значение 3 (2 + 1, ага), затем проверка остатка от деления на 2 на равенство единице оказывается истинной и происходит переход к следующей итерации цикла. Снова вычисляется newFib - на основе тех же значений, 2 + 1, снова остаток от деления равен единице - идём на следующий круг и так далее.

Это к вопросу о том, почему цикл не останавливается. А вообще - "пошло не так" у вас в тот момент, когда появилась вот эта безумная конструкция из while(true), break'а в конце тела цикла и continue-костыля, заставляющего цикл работать как цикл.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Negwereth
@Negwereth
lvivcss.com.ua
Continue прерывает текущую итерацию, а не весь цикл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы