首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成Fibonacci数,不需要循环/递归

生成Fibonacci数,不需要循环/递归
EN

Stack Overflow用户
提问于 2017-09-11 18:01:44
回答 1查看 450关注 0票数 0

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

代码语言:javascript
复制
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

如果没有任何循环/递归,我如何计算斐波那契数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 18:01:44

在写这个问题的时候,我做了额外的研究,因为我有了新的想法,这在很多时候都会发生。

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

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

转换为ES5,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
let gr = 1.61803398875;
let fib=(v)=>Math.floor((Math.pow(gr,v)-(-gr))/Math.sqrt(5));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46161784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档