#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.