DEV Community

Discussion on: Solving "Sum All Odd Fibonacci Numbers" / freeCodeCamp Algorithm Challenges

Collapse
 
akashkava profile image
Akash Kava

There is no point in calculating fib of old numbers, you can save it instead of calculating each time.

Collapse
 
ttatsf profile image
tatsuo fukuchi

Oh yes, I think so!
How do you like this?:

const memoizer = inits => rule =>{
  const memo = [...inits]
  const elem = n =>
    n >= memo.length ? memo[n] = rule(elem)(n)
    : memo[n]
  return elem
}

const fib = 
  memoizer( [0, 1] )( a => n => a(n-1) + a(n-2) )

const oddFibG = function*(){
  let i = 0
  let value 
  while (true){
    value = fib(i)
    if (value % 2 === 1) yield value
    i = i + 1
  }
}

const sumFibs = n => {
  let sum = 0
  for ( const i of oddFibG() ) {
    if ( i > n ) return sum
    sum = sum + i
  }
}

It's a little more complex, but very much faster than the above.