技术解析

Js 求斐波那契数列第 n 项的值结果总不对
0
2021-09-01 01:19:47
idczone

代码如下:




	
	Document


	


输出结果第 4 项为 3,第 5 项为 4.调试后发现 first 的结果总是 1,真是搞不懂,请大神帮忙看看!


为啥我试了一下没错呢

第一项难道不是 1 ?

我这对的

https://www.google.com/search?q=js+febonaci

没错的呀!
```javascript
function fb(num) {
var first = 1;
var second = 1;
var third;
if(num > 2){
for(var i = 0; i < num-2; i++){
third = first + second;
first = second;
second = third;
}
return third;
}
else{
return first;
}
}
for(let i=1; i<10; i++) {
console.log(i, fb(i));
}
/*
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
*/
```

不支持 markdown 啊,那我怎么删除我上面的这条评论呢





Document





没问题吖

function fibonacci(n) {
if (n === 1) {
return 1;
}
if (n === 2) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}

大兄弟,你这么写会爆栈的哦。。

各位大哥,是我之前把 for 循环里的“ first ”写成了“ first ”。可这帖子没法删除……。感谢各位大神!

各位大神 插一个问题 之前网上说这个数列求法最好不用递归 对 JS 是不是也成立呢?

爆栈了解一下

function F(n) {
if (n == 1) {
return 1
} else if (n == 2) {
return 1
} else {
return F(n - 1) + F(n - 2)
}
}
console.log(F(9))

没注意看评论 这种确实不行

递归写法是个狼人~

通项公式:(Math.pow((1+Math.sqrt(5))/2,n)-Math.pow((1-Math.sqrt(5))/2,n))/Math.sqrt(5)
就是会有精度损失

function fibonacci(n) {
if (n < 2) {
return 1;
}
var arr = [1,1];
for (i = 1; i < n; i++) {
arr[i + 1] = arr[i - 1] + arr[i];
}
return arr[n];
}
console.log(fibonacci(10));
你们要么函数栈太深,要么重复计算每个值,应该用一个数组保持每一项的值。这样比较快

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服