Javascript中计算斐波那契序列的最有效方法
我正试图通过优化算法和理解big-o等方面做得更好 我组合了下面的函数来计算第n个斐波那契数。这是有效的(对于合理的高投入)。我的问题是,如何改进此功能?用这种方法计算斐波那契序列有什么缺点Javascript中计算斐波那契序列的最有效方法,javascript,algorithm,big-o,fibonacci,Javascript,Algorithm,Big O,Fibonacci,我正试图通过优化算法和理解big-o等方面做得更好 我组合了下面的函数来计算第n个斐波那契数。这是有效的(对于合理的高投入)。我的问题是,如何改进此功能?用这种方法计算斐波那契序列有什么缺点 function fibo(n) { var i; var resultsArray = []; for (i = 0; i <= n; i++) { if (i === 0) { resultsArray.push(0);
function fibo(n) {
var i;
var resultsArray = [];
for (i = 0; i <= n; i++) {
if (i === 0) {
resultsArray.push(0);
} else if (i === 1) {
resultsArray.push(1);
} else {
resultsArray.push(resultsArray[i - 2] + resultsArray[i - 1]);
}
}
return resultsArray[n];
}
函数fibo(n){
var i;
var结果数组=[];
对于(i=0;i如果没有数组,则可以节省内存和。按调用
function fib(n) {
var a = 0, b = 1, c;
if (n < 3) {
if (n < 0) return fib(-n);
if (n === 0) return 0;
return 1;
}
while (--n)
c = a + b, a = b, b = c;
return c;
}
函数fib(n){
变量a=0,b=1,c;
if(n<3){
如果(n<0)返回fib(-n);
如果(n==0)返回0;
返回1;
}
而(--n)
c=a+b,a=b,b=c;
返回c;
}
性能斐波那契:
var memo = {};
var countInteration = 0;
var fib = function (n) {
if (memo.hasOwnProperty(n)) {
return memo[n];
}
countInteration++;
console.log("Interation = " + n);
if (n == 1 || n == 2) {
result = 1;
} else {
result = fib(n - 1) + fib(n - 2);
}
memo[n] = result;
return result;
}
//output `countInteration` = parameter `n`
我建议你将这篇文章发布在:或者:我最近在采访问题的背景下写了一篇关于斐波那契序列的文章,重点关注复杂性。你可能会发现这篇文章在查看一些实现及其特征时很有用。为什么ECMAScript/JavaScript会很特别?你错过了if(n==0)返回0;
@相反,我也错过了负的n
,现在添加这些情况肯定不是最有效的,因为它是手动计算的。如果你在玩大数字,你可以通过少量操作而不是数十万次操作来计算F(2n)和F(2n+1)。编辑: