В алгоритме последовательности Фибоначчи есть два рекурсивных шага.
return FIBONACCI(number - 1) + FIBONACCI(number - 2);
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
Таким образом, даже при относительно небольшом числе множество кадров помещается в стек вызовов. Вот визуализация:
const log = x => (console.log(`fib(${x})`), x);
function FIBONACCI(input) {
const number = parseInt(input);
if (number < 2) { return number; }
return log(FIBONACCI(number - 1)) + log(FIBONACCI(number - 2));
}
FIBONACCI("10");
Следовательно, вы довольно быстро исчерпываете стек вызовов.
Обратите внимание, что числа Фибоначчи более естественно выражаются при развертывании corecursion aka:
const fibs = i => {
const go = (x, y, j) =>
j === 1
? [x]
: [x].concat(go(y, x + y, j - 1));
return go(1, 1, i);
};
console.log(
fibs(100)); // 55
Это все еще не безопасно в стеке. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Время покажет '1023 *'