Сценарий алгоритма: суммируйте все нечетные числа Фибоначчи

#algorithm #fibonacci

#алгоритм #Фибоначчи

Вопрос:

Я пытаюсь решить эту проблему.

» Учитывая положительное целое число num , верните сумму всех нечетных чисел Фибоначчи, которые меньше или равны num .

Первые два числа в последовательности Фибоначчи равны 1 и 1. Каждое дополнительное число в последовательности является суммой двух предыдущих чисел. Первые шесть чисел последовательности Фибоначчи равны 1, 1, 2, 3, 5 и 8.

Например, sumFibs(10) должен возвращать 10, потому что все нечетные числа Фибоначчи, меньшие или равные 10, равны 1, 1, 3 и 5. »

Это было мое решение, и я просто не могу понять, почему оно удовлетворяет всем утверждениям, кроме последнего. Я не могу найти ошибку. Я был бы признателен за любую помощь!

 function sumFibs(num) {
  if(num === 1){
    return 1;
  }else if(num ===2){
    return 2;
  }

let arr=[1,1],
curr =1,
prev =1;

for(let i = 2; i<num;i  ){
  let next = curr   prev;
  prev = curr;
  curr= next;
  
  if(curr<num amp;amp; curr%2!==0){
      arr.push(curr);    
  }
}

   return arr.reduce((a,b)=>a b);
}

console.log(sumFibs(75024));
console.log(sumFibs(75025));
 

Это дает мне одинаковый результат для обоих, даже если они должны быть разными.

введите описание изображения здесь

Ответ №1:

Предполагается, что вы добавляете числа, которые «меньше или равны num». Вы суммируете только числа < num.

Ответ №2:

Ошибка, по-видимому, заключается в условном операторе if(curr<num amp;amp; curr%2!==0) , который не удовлетворяет приведенным выше инструкциям, которые гласят следующее: верните сумму всех нечетных чисел Фибоначчи, которые меньше или равны num

Поэтому, когда мы используем if(curr<num amp;amp; curr%2!==0) в качестве нашего условного оператора, мы не включаем 75025, поскольку он не представляет число меньше переменной num.

Вот где мы находим ошибку. Он должен включать в себя числа, которые не только меньше, но и равны num, в данном случае num равно 75025, которое не было включено в группу нечетных чисел Фибоначчи для суммирования из-за неправильного условного оператора.

Ответ №3:

Вы рассматриваете только числа меньше num, но в описании задачи указано меньше или равно. Базовый вариант для 1 также неверен. На самом деле вам не нужны базовые случаи в начале. И вместо цикла for вы должны использовать цикл while.