求斐波那契数组中的奇数之和

题目

在这道题目中,我们需要写一个函数,参数为一个正整数num。它的作用是计算斐波那契数列中,小于或等于num的奇数之和。
斐波那契数列中,第一和第二个数字都是 1,后面的每个数字由之前两数相加得出。斐波那契数列的前六个数字分别为:1、1、2、3、5、8。
比如,sumFibs(10)应该返回10。因为斐波那契数列中,比10小的数字只有 1、1、3、5。
sumFibs(4000000)应该返回 4613732。
sumFibs(1000)应该返回 1785。
sumFibs(75025)应该返回 135721。

代码

var sumFibs = (function () {
  let arr = [0, 1, 1]
  return function (n) {
    if (!arr[n]) {
      let i = arr.length;
      while (i <= n) {
        arr[i] = arr[i - 1] + arr[i - 2]
        i++
      }
    }
    return sum(arr, n);
  }
})();
function sum(arr, n) {
  return arr.reduce(function (prev, cur, index, arr) {
    return cur % 2 && cur <= n ? prev + cur : prev;
  })
}
sumFibs(4);
posted @ 2020-02-07 16:54  哥哦狗子  阅读(738)  评论(0编辑  收藏  举报