Сообщение от Vlasenko Fedor
|
Предложу функцию пошустрее
для больших чисел, в том числе отрицательных
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;
}
|
Вот так всегда - как только появляется ощущение, что уже чего то понимаю, встречаю код который не ясен практически процентов на 80. Можете немного пояснить как это работает?
Насколько я понимаю сначала присвоили переменной k какое то условное числовое значение, далее идет часть BigInt - n, здесь n равно какому то выражению с n и далее я совершенно не понимаю((
Если не будет времени/желания - хотя бы направьте где почитать/посмотреть.