FCC_Intermediate Algorithm_Sum All Odd Fibonacci Numbers

1.任务及要求

Sum All Odd Fibonacci Numbers


给一个正整数num,返回小于或等于num的斐波纳契奇数之和。

斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。

例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。

提示:此题不能用递归来实现斐波纳契数列。因为当num较大时,内存会溢出,推荐用数组来实现。

参考文档:博客园Issue

如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。

这是一些对你有帮助的资源:

测试数据:

 sumFibs(1) 应该返回一个数字。    sumFibs(1000) 应该返回 1785。    sumFibs(4000000) 应该返回 4613732。    sumFibs(4) 应该返回 5。    sumFibs(75024) 应该返回 60696。    sumFibs(75025) 应该返回 135721。

2.我的解法

// 思路梳理:
// 1,当num小于2时,直接返回1;
// 2,当num大于等于2时,第一项m = 1,第二项,n = 1;
// 3,判断n是否不大于num,且是奇数;如果是,累加到sum
// 如果n大于m,结束循环
// 3,从第二项循环设置m,n计算新的m,n
// 先计算n(新的n)=m + n(旧的m,n),再计算m = n (新的n)- m(旧的m)

// 斐波纳契计算参考:https://www.cnblogs.com/meteoric_cry/archive/2010/11/29/1891241.html

 1 function sumFibs(num) {
 2   var sumFibs = 1;
 3   if(num < 2) {
 4     return 1;
 5   }
 6 
 7   var m = 1, n = 1;
 8   
 9   for( var i = 2; i <= num ; i ++) {
10     if(n <= num && n%2 === 1) {
11        sumFibs += n;
12     } else if(n > num) {
13        break;
14     }
15     n = m + n;
16     m = n - m;
17   }
18   
19   return sumFibs;
20 }
21 
22 sumFibs(4);

3.发现的其他解法

// CSDN:https://blog.csdn.net/weixin_31347831/article/details/61614354
// CSDN:https://blog.csdn.net/qq_37399074/article/details/77853606
// 简书:https://www.jianshu.com/p/21d0765dfd5a

上一篇:python3 定时器Timer


下一篇:2020中国.NET开发者峰会近50场热点技术专题揭秘