1.任务及要求
Sum All Odd Fibonacci Numbers
给一个正整数
num
,返回小于或等于num
的斐波纳契奇数之和。斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
提示:此题不能用递归来实现斐波纳契数列。因为当
num
较大时,内存会溢出,推荐用数组来实现。如果你被卡住了,记得开大招 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