Предложу функцию пошустрее
для больших чисел, в том числе отрицательных
function fib(n) {
let k = BigInt(n < 0 ? Math.pow(-1, n + 1) : 1);
n = BigInt(Math.abs(n));
const calculate = n => {
if (n === 0n) {
return [0n, 1n];
}
const [a, b] = calculate(n / 2n);
const c = a * (2n * b - a);
const d = (a * a + b * b);
return n % 2n === 0n ? [c, d] : [d, c + d];
}
const res = calculate(n);
return res[0] * k;
}