作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 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
如何在不进行任何循环/递归的情况下计算斐波那契数?
最佳答案
在写这个问题时,我做了额外的研究,因为我有了新的想法,这种情况经常发生。
我找到了this answer which has the math for a fibonacci number without recursion
Fn = (φn − (−φ)−n) / √5, where φ = (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));
关于javascript - 无需任何循环/递归即可生成斐波那契数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46161784/
我是一名优秀的程序员,十分优秀!