Итеративное решение
function fib(n) {
if (n < 0) throw new RangeError('n >= 0');
if (n <= 1) return n;
let a = 0, b = 1;
for (let i = 2; i <= n; i++) {
[a, b] = [b, a + b];
}
return b;
}
fib(10);
Наивная рекурсия fib(n-1)+fib(n-2) — экспоненциальна; с мемоизацией — O(n).
Большие n
Числа быстро выходят за Number.MAX_SAFE_INTEGER — тогда BigInt.
Итог
Итерация O(n)/O(1) памяти — лучший ответ для скрининга.