Напишите функцию, которая возвращает ряд Фибоначчи до определенного числа. Нельзя использовать let и var, только const

Пример работы функции

fibonacci(8);
Вывод: [0,1,1,2,3,5]

Нашел как генерировать ряд фибоначчи методами массива:

const fibonacci = n =>
  Array.from({ length: n }).reduce(
    (acc, val, i) => acc.concat(i > 1 ? acc[i - 1] + acc[i - 2] : i),
    []
  );

Но не могу понять как генерировать ряд до числа не большего поступающему в функцию без применения let и var.


Ответы (2 шт):

Автор решения: Konstantin Modin

Можно сделать примерно так:

const fib = (
  lim,
  res = [0, 1],
  next = res.slice(-2).reduce((a, b) => a + b)
) => {
  return lim < next ? res : fib(lim, [...res, next]);
};

console.log(`fib(6)`, fib(6));
console.log(`fib(10)`, fib(10));
console.log(`fib(20)`, fib(20));

→ Ссылка
Автор решения: vsemozhebuty

Вариант без рекурсии:

function fibonacci(limit) {
  if (limit <= 0) return [];
  if (limit === 1 ) return [0];

  const result = [0, 1];

  while (true) {
    const sum = result[result.length - 2] + result[result.length - 1];
    if (sum >= limit) break;
    result.push(sum);
  }

  return result;
}

console.log(fibonacci(0));
console.log(fibonacci(1));
console.log(fibonacci(2));
console.log(fibonacci(8));

→ Ссылка