function tribonacci(arr, n){
let sum = 0;
for(let i= arr.length-1; i > arr.length-4; i--){
sum += arr[i]
}
while(arr.length < n){
arr.push(sum);
}
return arr;
}
console.log(tribonacci([1, 1, 1], 10));
对于 ([1, 1, 1], 10) 它应该记录 [1, 1, 1, 3, 5, 9, 17, 31, 57, 105] 因为它遵循 tribonacci 序列并且我们希望它停止执行一旦我们有 10 个整数。
最初 for 循环执行得很好,所以如果我给它 [1,1,1] 它会记录 [1,1,1,3],如果我给它 [1,1,1,3] 它会打印 [ 1,1,1,3,5]等等。然后我添加了 while 循环来指定我希望数组结束的长度(n)。现在输出不断记录 3 直到有 10 个整数:[1, 1, 1, 3, 3, 3, 3, 3, 3, 3]。
我知道它会重复推入序列中的下一个数字(即 3),计算 [1,1,1] 而不是从数组中的最后一个索引开始重新计算......所以我尝试了一堆不同的东西就像将 for 循环嵌套在 while 循环内或尝试 do...while 循环等无济于事。我需要在while循环中不断重置计算吗?我做错了什么以及如何解决这个问题?
您的代码仅执行每个循环一次,因此您计算一次数组中前三个元素的总和,然后继续将此总和附加到数组中,直到其长度达到n。
相反,您想通过将循环放在一起来计算总和 n - 3 次:
function tribonacci(arr, n){
while(arr.length < n){
let sum = 0;
for(let i= arr.length-1; i > arr.length-4; i--){
sum += arr[i]
}
arr.push(sum);
}
return arr;
}
console.log(tribonacci([1, 1, 1], 10));