Показать сообщение отдельно
  #4 (permalink)  
Старый 20.04.2021, 19:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Предложу функцию пошустрее
для больших чисел, в том числе отрицательных
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;
}
Ответить с цитированием