Prompt: Given a positive integer num, return the sum of all odd Fibonacci numbers that are less than or equal to num. The first two numbers in the Fibonacci sequence are 1 and 1. Every additional number in the sequence is the sum of the two previous numbers. The first six numbers of the Fibonacci sequence are 1, 1, 2, 3, 5 and 8. For example, sumFibs(10) should return 10 because all odd Fibonacci numbers less than or equal to 10 are 1, 1, 3, and 5.
The code I wrote for this is:
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));
but i get 23 when it should be 10, I’m not sure why this doesn’t work because i feel this would work in java. I have also tried to do arr[i] == queef but that also does not work. I am missing something or should this work?
Advertisement
Answer
I think your error relies in
for(let i = 2; i <= num; i++){
I believe you’re generating an amount of numbers till num instead of the value itself. Try with something like this (I tried to keep your style):
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));