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


#1

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

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]);
  }

#2
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];
    }
  }

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


#5

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


#6

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


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

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

#8

Мой вариант :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);

#9

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

}


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

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

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


#11

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

Мое решение без 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]);
        }

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

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

#13
Сводка
var fibonacciNumbers = [1, 1];
var numbersQuantity = 7;

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

#14
Сводка const fib = (length, acc = [0, 1]) => length === 0 ? acc : fib(length - 1, [...acc, acc[acc.length-1] + acc[acc.length - 2]]);

#15

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


#16

потому что когда вы добавляете первое число к массиву, его длина растет и соответственно величина 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 числа, то уже работать ваш алгоритм не будет.


#17

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


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


#18

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

я немного иначе написал, но эт те же яйки, тока в профиль
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);
}

#19

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


#20

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


#21

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

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

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