【问题标题】:Generate Fibonacci Number without ANY looping / recursion无需任何循环/递归即可生成斐波那契数
【发布时间】:2017-09-11 18:01:44
【问题描述】:

使用 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

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

【问题讨论】:

    标签: javascript fibonacci


    【解决方案1】:

    在写这个问题时,我做了额外的研究,因为我有新的想法,这种情况经常发生。

    我找到this answer which has the math for a fibonacci number without recursion

    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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-03
      • 2023-04-06
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2023-03-12
      相关资源
      最近更新 更多