Массив последовательности Фибоначчи в Javascript

Это мой третий день изучения Javascript в онлайн-классе. Сегодня я узнал о массивах и циклах while / for, и, чтобы попрактиковаться во всем этом, я работаю над задачей создать функцию, которая производит $ (п) $ члены последовательности Фибоначчи в массиве.

Так что я надеюсь на отзывы об этом коде! Я думаю, что это работает, но я хотел бы знать, как я могу сделать это более эффективным или лучше каким-либо образом.

function fibonacciGenerator (n) {
    var output=[];
    if (n===1) {
      output=[0];
    } else if (n===2) {
      output=[0,1];
    } else if (n>2) {
      output=[0,1];
      for (var i=3;i<=n;i++) {
        output.push(output[i-3]+output[i-2]);
      }
    }
    return output;
}

1 ответ
1

Для новичка этот код выглядит нормально. Хорошая работа с использованием строгого сравнения на равенство — т.е. ===. Отступ в основном согласован, хотя первый уровень отступа составляет 4 пробела, а все последующие уровни кажутся 2 пробелами.

Самое большое, что я бы изменил, — это интервал. Для удобства чтения это помогает добавить интервалы между операторами, особенно бинарными операторами, такими как ===, >, =и т. д. Вы можете использовать линтер, например ESLint, JSHint и т. Д. ESLint имеет такие правила, как space-infix-ops.

Хотя настройки форматирования очень личные, в ряде руководств по стилю требуются пробелы вокруг операторов, например:

var sum = 1 + 2; 

Сторонники этих дополнительных пробелов считают, что это упрощает чтение кода и позволяет легче выделить потенциальные ошибки, такие как:

var sum = i+++2; 

Хотя это допустимый синтаксис JavaScript, трудно определить, что задумал автор.

1

Я пробовал пройти 0 к функции, и она вернула [0, 1], что будет тем же результатом, если я передам 2. Теоретически он должен возвращать пустой массив, когда 0 передается.

Первый и второй случаи else можно упростить до простого else, поскольку цикл не запустится, если i меньше чем n а в случае 2 никогда не будет так, чтобы 3 было меньше 2. Так что это можно упростить следующим образом:

function fibonacciGenerator (n) {
    var output = [];
    if (n === 1) {
      output = [0];
    } else {
      output = [0, 1];
      for (var i=3; i <= n; i++) {
        output.push(output[i-3] + output[i-2]);
      }
    }
    return output;
}

В более продвинутом JavaScript const ключевое слово может использоваться для объявления output поэтому он не может быть перезаписан, что потребует исключительно использования .push() метод добавления элементов в выходной массив. С использованием const когда перераспределение не требуется, это хорошая привычка, потому что это может помочь избежать случайное переназначение и другие ошибки.

В качестве альтернативы функция может возвращаться раньше в базовых случаях — например, когда n является 1.

  • Замечательно, я это очень ценю. Я не понимал, что мне нужно только одно условие. Мне придется вернуться к этому, когда я тоже узнаю о константе!

    — KGE

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *