Files
Randell Dawson 1494a50123 fix(guide): restructure curriculum guide articles (#36501)
* fix: restructure certifications guide articles
* fix: added 3 dashes line before prob expl
* fix: added 3 dashes line before hints
* fix: added 3 dashes line before solutions
2019-07-24 13:29:27 +05:30

3.4 KiB

title
title
Sum All Odd Fibonacci Numbers

Sum All Odd Fibonacci Numbers


Problem Explanation

You will need to gather all the Fibonacci numbers and then check for the odd ones. Once you get the odd ones then you will add them all. The last number should be the number given as a parameter if it actually happens to be an off Fibonacci number.


Hints

Hint 1

To get the next number of the series, you need to add the current one to the previous and that will give you the next one.

Hint 2

To check if a number is even all you have to check is if number % 2 == 0.

Hint 3

As you get the next odd one, don't forget to add it to a global variable that can be returned at the end. result += currNumber; will do the trick.


Solutions

Solution 1 (Click to Show/Hide)
function sumFibs(num) {
  var prevNumber = 0;
  var currNumber = 1;
  var result = 0;
  while (currNumber <= num) {
    if (currNumber % 2 !== 0) {
      result += currNumber;
    }

    currNumber += prevNumber;
    prevNumber = currNumber - prevNumber;
  }

  return result;
}

// test here
sumFibs(4);

Code Explanation

  • Create a variable to keep record of the current and previous numbers along with the result that will be returned.
  • Use a while loop to make sure we do not go over the number given as parameter.
  • We use the modulo operand to check if the current number is odd or even. If it is odd, add it to the result.
  • Complete the Fibonacci circle by rotating getting the next number and swapping values after.
  • Return the result.
Solution 2 (Click to Show/Hide)
function sumFibs(num) {
  // Perform checks for the validity of the input
  if (num < 0) return -1;
  if (num === 0 || num === 1) return 1;

  // Create an array of fib numbers till num
  const arrFib = [1, 1];
  let nextFib = 0;

  // We put the new Fibonacci numbers to the front so we
  // don't need to calculate the length of the array on each
  // iteration
  while ((nextFib = arrFib[0] + arrFib[1]) <= num) {
    arrFib.unshift(nextFib);
  }

  // We filter the array to get the odd numbers and reduce them to get their sum.
  return arrFib.filter(x => x % 2 != 0).reduce((a, b) => a + b);
}

// test here
sumFibs(4);

Code Explanation

  • Create an array of fibonacci numbers till num.
  • Use filter() method to filter out even numbers.
  • Use reduce() method to sum the remaining (odd) values.
  • Return the sum.