Euler #2 Fibonacci Javascript function will only return zero after crunching the numbers

StackOverflow https://stackoverflow.com/questions/23351981

  •  11-07-2023
  •  | 
  •  

Question

I wrote a function to solve Euler #2 in Javascript for adding all the even Fibonacci numbers up to 4,000,000. However, when I run my function, the chrome dev tool keeps giving me zero as the answer. I am not sure why.

function DoEverything() {
  oldnum = 0;
  num = 1;
  total = 0;
  result = addFibNumbers(num, oldnum);
  console.log(result);
} 
function addFibNumbers(num, oldnum) {
  while(num < 4000000) {
    if (num % 2 == 0) {
      newnum = num + oldnum;
      total += newnum;
      oldnum = num;
      num = newnum;
    }
  return total;
  }
}
DoEverything();
Was it helpful?

Solution

The reason its returning 0:

result = addFibNumbers(num, oldnum);//num=1,oldNum=0

//function
while(num < 4000000) { //num is 1, so it enters while
if (num % 2 == 0) {// 1 % 2 == 1, so skip this if
return total;// this ends the function, returning total=0 as nothing was changed

I guess you are looking to do this:

  while(num < 4000000) {
      newnum = num + oldnum;
      if (newnum % 2 == 0 && newnum < 4000000) {
          total += newnum;
      }
      oldnum = num;
      num = newnum;
  }
  return total;

OTHER TIPS

I would guess it is your while loop

Change this:

while(num < 4000000) {
    if (num % 2 == 0) {
      newnum = num + oldnum;
      total += newnum;
      oldnum = num;
      num = newnum;
    }
  return total;
  }

to this:

while(num < 4000000) {
    if (num % 2 == 0) {
      newnum = num + oldnum;
      total += newnum;
      oldnum = num;
      num = newnum;
    }
}
return total;

Your while loop is useless with a return in it and no if statement to control it's use.

In addition to modifying your while statement inside of addFibNumbers() like so:

function addFibNumbers(num, oldnum) {
  while(num < 4000000) {
    newnum = oldnum + num;
    if (oldnum % 2 == 0) {
        total += oldnum;
    }
    oldnum = num;
    num = newnum;
  }
  return total;
}

you will also need to initialize the first two Fibonacci terms to 1 and 2: oldnum = 1; and num = 2;

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top