生成没有任何循环 /递归的斐波那契数



使用ES5作为伪代码/示例:

var gr = 1.61803398875;
function fib(v) { // fib without recursion
    if(v < 2) return v;
    return Math.round(((v-2) + (v-1)) * gr);
}
function fibr(v) { // fib with recursion
        if(v < 2) return v;
    return fibr(v-2) + fibr(v-1);
}
console.clear();
console.log(fib(0), fibr(0)); // 0 0
console.log(fib(1), fibr(1)); // 1 1
console.log(fib(2), fibr(2)); // 2 1
console.log(fib(3), fibr(3)); // 5 2
console.log(fib(4), fibr(4)); // 8 3
console.log(fib(5), fibr(5)); // 11 5
console.log(fib(6), fibr(6)); // 15 8
console.log(fib(7), fibr(7)); // 18 13
console.log(fib(8), fibr(8)); // 21 21
console.log(fib(9), fibr(9)); // 24 34

如何在没有任何循环/递归的情况下计算斐波那契数?

在写这个问题时,我做了其他研究,因为我有很多时间发生。

我找到了这个答案,该答案具有斐波那契号的数学,而没有递归

fn =(φn-(−φ)-n)/√5,其中φ=(1 √5)/2≈1.6180339887

转换为ES5,看起来像这样:

var gr = 1.61803398875;
function fib(v) { // fib without recursion
    if(v < 2) return v;
    // return Math.round(((v-2) + (v-1)) * gr);
    return Math.floor((Math.pow(gr, v) - (-gr)) / Math.sqrt(5));
}

和想要它的人的简短ES6

let gr = 1.61803398875;
let fib=(v)=>Math.floor((Math.pow(gr,v)-(-gr))/Math.sqrt(5));

相关内容

最新更新