不确定 syntax/methods。我相信我的代码应该工作,但它不

Unsure about syntax/methods. I believe my code should work but it does not

提示:给定一个正整数num,return所有小于等于num的斐波那契奇数之和。斐波那契数列中的前两个数字是 1 和 1。序列中的每个附加数字都是前两个数字的总和。斐波那契数列的前六个数字是1、1、2、3、5和8。例如,sumFibs(10)应该return10,因为所有小于或等于10的斐波那契奇数都是1、1 、3 和 5。

我为此写的代码是:

function sumFibs(num) {
  const arr = [1,1];
  let sum = 0;
  for(let i = 2; i <= num; i++){
    let queef = arr[i - 1] + arr[i - 2];
    arr.push(queef);
  }
  for(let j = 0; j < arr.length; j++){
    if(arr[j] % 2 != 0){
      sum += arr[j];
    }
  }
  return sum;
}

console.log(sumFibs(6));

但是当它应该是 10 时我得到了 23,我不确定为什么这不起作用,因为我觉得这会在 java 中起作用。我也尝试过 arr[i] == queef 但这也不起作用。我遗漏了一些东西或者这应该有效吗?

欢迎 Bethany,享受您新的编程之旅。如果您将代码中的第 4 行更改为:

for(let i = 2; i < num; i++){

它returns10

我认为你的错误在于

for(let i = 2; i <= num; i++){

我相信您正在生成直到 num 的数字而不是值本身。试试这样的东西(我试着保持你的风格):

function sumFibs(num) {
  if (num === 1) return 1;
    
  const arr = [1,1];
  let sum = 2;
  for(let i = 2; i <= num; i++){
    let queef = arr[i - 1] + arr[i - 2];
    arr.push(queef);

    if(arr[i] % 2 != 0 && queef < num){
        sum += arr[i];
    }
  }
  return sum;
}

console.log(sumFibs(6));

在第一个for循环中应该是< num。由于数组索引从 0 而不是 1 开始,当您键入 <= 6 时,它会生成一个包含 7 个数字的数组。