#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. Добро пожаловать! Мой совет, используйте какую-нибудь ИДЕЮ, редактор, что угодно, что вы можете найти полезным / радостным. Удачи!