var num = [1,1];
var total = 0;
var i = num.length;
do {
i++;
num[i] = num[num.length-1] + num[num.length-2];
total+=num[i];
console.log(total);
}
while(num[num.length] < 4000000);
我一直在为Euler项目工作一两天,希望能够扩展我的知识和实用性。关于第二个问题,我一直在找出一种(坏的)获得斐波纳契序列的方法。但是我的代码将打印“2”到控制台,因为它应该然后停止。我的另一个问题是只使用“while(X IS TRUE / FALSE){DO STUFF}”就行不通了。不知道为什么。
我可能只是犯了愚蠢的错误但有人请赐教我:)
答案 0 :(得分:3)
num.length
将始终比num
的最后一个索引大1,即如果num.length
为5,num
的索引为0到4,{{1} }不存在。
可用的最高索引为num[5]
,因此请在您的情况下尝试num.length - 1
。
答案 1 :(得分:2)
您的num
数组包含2个元素,因此num.length
(以及i
)为2. do
块中的第1个语句为i++
。现在i
是3。
您正在设置num[3]
,这意味着num
现在是[1, 1, undefined, 1]
。
另外,在while
,您正在查看num[num.length]
。由于数组是零索引的,因此{em>永远不会工作,因为num.length
现在是4。
我的建议是:在设置元素后增加i
。因此,您推送一个新元素,然后递增长度计数器。
var num = [1, 1],
total = 0,
i = 2; // we already know the length, no need to get it
do {
// we don't need the i++ here
num[i] = num[i - 1] + num[i - 2]; // add the last 2 elements to the end
total += num[i];
console.log(total);
}
while (num[i++] < 4000000); // "i++" increments i and returns its old value