Числа Фибоначчи

Наверное можно как-то упростить

Summary
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;
var total = fibonacciNumbers.length + numbersQuantity;
for(var i = 2; i < total; i++) {
    fibonacciNumbers.push(fibonacciNumbers[i-1]+fibonacciNumbers[i-2]);
  }
1 лайк
for (var i = 1; i <= numbersQuantity; i ++) {
  fibonacciNumbers.push(fibonacciNumbers[i-1] + fibonacciNumbers[i]);
}
4 лайка
    for(var i =0; i<=numbersQuantity; i++){
  if(fibonacciNumbers.length == i){
    fibonacciNumbers[i]= fibonacciNumbers[i-1] + fibonacciNumbers[i-2];
    }
  }

не получается вывести последнее число.

Уже нашел ответ. всего лишь добавил +1 к numbersQuantity+1 . но хотелось бы узнать, есть ли лучше способ.

Изучите решение выше

My solution
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

for (var i = 0; i < numbersQuantity; i++) {
  fibonacciNumbers.push(fibonacciNumbers[i] + fibonacciNumbers[i+1]);
}
3 лайка

Мой вариант :thinking:

Числа Фибоначчи
console.log('Программа "Числа Фибоначчи" by Nerealist');

var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

console.log('Изначальный массив : ' + fibonacciNumbers);
console.log('Необходимое кол-во чисел в новом массиве : ' + numbersQuantity);

for (var i = 1; i <= numbersQuantity; i++) {
  fibonacciNumbers.push(fibonacciNumbers[i] + fibonacciNumbers[i - 1]);
}

console.log('Новый массив с числами Фибоначчи ' + fibonacciNumbers);

for(var i=1; i<=numbersQuantity;i++){
fibonacciNumbers.push(fibonacciNumbers[i]+fibonacciNumbers[i-1]);

}

var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

for (var i = 1; i <= numbersQuantity; i++) {
  fibonacciNumbers[i+1] = fibonacciNumbers[i] + fibonacciNumbers[i-1];
}

Что интересно - метод push не пригодился.

1 лайк

А что если мы не знаем сколько в массиве имеется элементов.

Мое решение без push()
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;
for (var i = numbersQuantity; i > 0; i--) {
     fibonacciNumbers[fibonacciNumbers.length] = (fibonacciNumbers[fibonacciNumbers.length - 1] + fibonacciNumbers[fibonacciNumbers.length - 2]);
        }
1 лайк
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

for (var i = 0; i <= numbersQuantity - 1; i++) {
  fibonacciNumbers.push(fibonacciNumbers[i] + fibonacciNumbers[fibonacciNumbers.length - 1]);
}
Сводка
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

for (var i = 0; i < numbersQuantity; i++) {
    fibonacciNumbers.push(fibonacciNumbers[fibonacciNumbers.length - 1] + fibonacciNumbers[fibonacciNumbers.length - 2]);
}
1 лайк
Сводка const fib = (length, acc = [0, 1]) => length === 0 ? acc : fib(length - 1, [...acc, acc[acc.length-1] + acc[acc.length - 2]]);

Объясните мне плз, почему один из вариантов не проходит

потому что когда вы добавляете первое число к массиву, его длина растет и соответственно величина fibonacciNumbers.length + numbersQuantity становится динамической в цикле и цикл никогда не закончится. собственно вам и выдает Timeout Error

цикл повесился
for (var i = 2; i < fibonacciNumbers.length + numbersQuantity; i++) {
  console.log(fibonacciNumbers.length + numbersQuantity);
  fibonacciNumbers.push(fibonacciNumbers[i-2] + fibonacciNumbers[i-1]);
}

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

предварительная запись переменной
var total = fibonacciNumbers.length + numbersQuantity;
for (var i = 2; i < total; i++) {
  console.log(total);
  fibonacciNumbers.push(fibonacciNumbers[i-2] + fibonacciNumbers[i-1]);
}

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

Благодарю за пояснения.


Думаю, что так, не будет зависеть от изначальной длины массива

1 лайк

угу, правильно

я немного иначе написал, но эт те же яйки, тока в профиль
var fibonacciNumbers = [1, 2, 3, 4];
var numbersQuantity = 7;
for (var i = 0; i < numbersQuantity; i++) {
  fibonacciNumbers.push(fibonacciNumbers[fibonacciNumbers.length-2] + fibonacciNumbers[fibonacciNumbers.length-1]);
  console.log(fibonacciNumbers);
}
1 лайк

for(var i = 0; i < numbersQuantity; i++){
fibonacciNumbers.push(fibonacciNumbers[i] + fibonacciNumbers[i+1]);
}
А у меня так ))

3 лайка

Почитала в Викопедии что такое числа Фибоначи, пишут что это числа в которой первые два числа равны либо 1 и 1, либо 0 и 1, а почему при проверке изначальные числа могут не совпадать с 1?

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

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

псс, я вам тут курс подогнал, прям чую что вам тяжко дается, тут немного повеселее рассказывают.

2 лайка