Невозможно получить первые два элемента в массиве при создании последовательности Фибоначчи в JS

#javascript #arrays #function #if-statement #fibonacci

#javascript #массивы #функция #if-оператор #фибоначчи

Вопрос:

Я пытался создать последовательность Фибоначчи, которая всегда начинается с [0, 1], используя простой JS. Однако, как это написано сейчас, функция не возвращает первые два элемента в массиве, когда я вызываю соответствующее число n. Итак, для n = 1 и n = 2 (и ТОЛЬКО для этих значений n) я получаю undefined при вызове функции. Однако всякий раз, когда я вызываю n больше 2, последовательность Фибоначчи возвращается правильно с правильным количеством элементов массива (таким образом, включая элементы 0 и 1, которые я не могу вызвать самостоятельно).

Вот код:

 function generator(n) {
var output = [];
var num1 = 0;
var num2 = 1;
var next;

if (n === 1) {
    output = [0];
} else if (n === 2) {
    output = [0, 1];
} else {
    output = [num1, num2];
    for (var count = 2; count < n; count  ) {
    next = num1   num2;
    num1 = num2;
    num2 = next;
    output.push(next); 
}

return output;




}

}
 

Кто-нибудь знает, что не так в коде? Большое спасибо за любую помощь!

Комментарии:

1. В третьем случае вам не хватает закрывающей фигурной скобки для цикла for . Что может означать, что первые два случая фактически не попадают в оператор return, потому что возвращаемый statment теперь находится только в случае ‘else’. (или это может быть просто опечатка в вашем вопросе)

2. Если бы вы заставляли себя всегда правильно делать отступы в своем коде, вы бы избежали таких ошибок. И ваше редактирование подтверждает замечание Рупа.

3. Боже, ты невероятный, спасибо! На самом деле это было всего лишь неправильное размещение оператора return! Вы не поверите, сколько времени я потратил на выяснение этого. Еще раз спасибо!

4. @mrcrazyog .. на практике ВСЕГДА делайте отступы в коде правильно.

5. @HymnZzy да, моя ошибка. Глупая ошибка новичка. Надеюсь, я запомню это сейчас. Еще раз спасибо 🙂

Ответ №1:

Прежде всего, существует проблема со скобками в коде, который вы опубликовали выше. код должен выглядеть следующим образом.

 function generator(n) {
var output = [];
var num1 = 0;
var num2 = 1;
var next;

if (n === 1) {
    output = [0];
} else if (n === 2) {
    output = [0, 1];
} else {
    output = [num1, num2];
    for (var count = 2; count < n; count  ) {
    next = num1   num2;
    num1 = num2;
    num2 = next;
    output.push(next); 
}}

return output;
}
 

Однако это может быть просто проблема с опечаткой. А во-вторых, если я использую исправленный тип функции, проблем нет.

 function generator(n) {
var output = [];
var num1 = 0;
var num2 = 1;
var next;

if (n === 1) {
    output = [0];
} else if (n === 2) {
    output = [0, 1];
} else {
    output = [num1, num2];
    for (var count = 2; count < n; count  ) {
    next = num1   num2;
    num1 = num2;
    num2 = next;
    output.push(next); 
}}

return output;
}

//testing
for(let i=1;i<=5;i  ){
  console.log(`${i}'th result`)
  console.log(generator(i));
} 

Попробуйте это, все должно быть в порядке.

Комментарии:

1. Большое спасибо! Это работает! Как вы, ребята, сказали, это была проблема с моим глупым отступом и неправильным размещением возврата. Я должен уделять этому больше внимания.

2. Добро пожаловать! Мой совет, используйте какую-нибудь ИДЕЮ, редактор, что угодно, что вы можете найти полезным / радостным. Удачи!