给定一个数字数组(arr)和数组的长度(n)作为参数,如何创建一个 tribonacci 序列?

问题描述 投票:0回答:1
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循环中不断重置计算吗?我做错了什么以及如何解决这个问题?

javascript arrays for-loop while-loop
1个回答
0
投票

您的代码仅执行每个循环一次,因此您计算一次数组中前三个元素的总和,然后继续将此总和附加到数组中,直到其长度达到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));
© www.soinside.com 2019 - 2024. All rights reserved.