var x = 0;
var y = 1;
var z;
fib[0] = 0;
fib[1] = 1;
for (i = 2; i <= 10; i++) {
alert(x + y);
fib[i] = x + y;
x = y;
z = y;
}
我正在尝试生成一个简单的斐波那契数列,但没有输出。
任何人都可以让我知道出了什么问题吗?
原文由 methuselah 发布,翻译遵循 CC BY-SA 4.0 许可协议
var x = 0;
var y = 1;
var z;
fib[0] = 0;
fib[1] = 1;
for (i = 2; i <= 10; i++) {
alert(x + y);
fib[i] = x + y;
x = y;
z = y;
}
我正在尝试生成一个简单的斐波那契数列,但没有输出。
任何人都可以让我知道出了什么问题吗?
原文由 methuselah 发布,翻译遵循 CC BY-SA 4.0 许可协议
根据 Interview Cake 问题,序列 为 0,1,1,2,3,5,8,13,21 。如果是这种情况,则此解决方案有效并且在不使用数组的情况下是递归的。
function fibonacci(n) {
return n < 1 ? 0
: n <= 2 ? 1
: fibonacci(n - 1) + fibonacci(n - 2)
}
console.log(fibonacci(4))
可以这样想。
fibonacci(4) .--------> 2 + 1 = 3
| / |
'--> fibonacci(3) + fibonacci(2)
| ^
| '----------- 2 = 1 + 1 <----------.
1st step -> | ^ |
| | |
'----> fibonacci(2) -' + fibonacci(1)-'
请注意,此解决方案虽然效率不高。
原文由 Alex Cory 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
您从未将
fib
声明为数组。使用var fib = [];
解决这个问题。此外,您永远不会修改
y
变量,也不会使用它。下面的代码更有意义,此外,它不会创建未使用的变量: