刚开始我看到Fibonacci我就直接写了计算斐波那契数列的算法后来发现掉坑里了,觉得挺有意思的就分享一下吧
题目
返回所有小于传入数值的斐波那契数列中的奇数之和,如果传入的数值是斐波那契数,那么它也应该参与求和。
斐波那契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,向 function 传入 4 应该返回 5,因为斐波那契数列中所有小于 4 的奇数是 1、1、3。
测试:
sumFibs(1) 应该返回一个数字。
sumFibs(1000) 应该返回 1785。
sumFibs(4000000) 应该返回 4613732。
sumFibs(4) 应该返回 5。
sumFibs(75024) 应该返回 60696。
sumFibs(75025) 应该返回 135721。
思路
仔细看了一下需求后发现只要求得出斐波那契数列中的奇数的和。我当时整个人都懵逼了,这坑爹劲就跟问我大学一次性交多少钱差不多...话不多说,既然明白了需求就开始动手了。
我们先列出斐波那契数的含义:F(n)=F(n-1)+F(n-2)+...+F(1),我们只需要提取小于传入值的斐波那契数列中奇数并相加就行。
声明一个总和变量,在计算斐波那契数列算法中插入三目运算符判断数列中当前的数值是否为奇数,如果是给总和变量加上去就好。
不死于话多开始动手写代码:
1 function sumFibs(num) { 2 var a=0,b=0,c=1,sum=0; 3 for(var i=0;c<=num;i++){ 4 sum+=(c%2==1?c:0); 5 a=b; 6 b=c; 7 c=a+b; 8 } 9 return sum; 10 }
解析一下上面的.......算了。除了有坑挺简单的一个算法,不解析了有不懂的可以留言问我,期待与你谈笑风生蛤蛤蛤