美文网首页
FCC-Sum All Odd Fibonacci Number

FCC-Sum All Odd Fibonacci Number

作者: zooeydotmango | 来源:发表于2017-11-22 17:03 被阅读0次

    给一个正整数num,返回小于或等于num的斐波纳契奇数之和。
    斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
    例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
    提示:此题不能用递归来实现斐波纳契数列。因为当num较大时,内存会溢出,推荐用数组来实现。
    博客园
    issue

    刚开始以为是挺简单的题目,后来仔细看了需求有点傻眼,返回小于等于num的斐波那契数且要求奇数。刚开始考虑单独写一个斐波那契数列的方法,然后while其小于num时,判断是奇数则加入和。后来看到一个更好更简洁的方法,在生成斐波那契数的同时判断是否小于num且为奇数。

      var a=0,b=0,c=1,sum=0;
      for(var i=0;c<=num;i++){                //当前值小于等于num加入for循环非常巧妙
        sum+=(c%2==1?c:0);
        a=b;
        b=c;
        c=a+b;
      }
      return sum;
    }
    

    非常巧妙,因此我想把这个方法套用到数组方法中,但是需要想一下边缘的问题。

    function sumFibs(num) {
      var fib=[1,1];
      var sum=2;
      for(var i =2;fib[i-1]<num;i++){         //fib[i]此时还没有被赋值 
        fib[i]=fib[i-1]+fib[i-2];
        if(fib[i]>num){break;}                //在加sum之前判断边界
        if(fib[i]%2 !==0){sum=sum+fib[i];}
      }
      return sum;
    }
    sumFibs(1);                               //刚好num为1或2时返回值都是2,省去了判断
    

    有机会想尝试测试两种方法包括最开始的想法处理速度的差别。

    相关文章

      网友评论

          本文标题:FCC-Sum All Odd Fibonacci Number

          本文链接:https://www.haomeiwen.com/subject/homwvxtx.html