斐波纳契奇数求和算法挑战
问题:
给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契序列中的前两个数字是1和1.序列中的每个附加数字是前面两个数字的和。斐波纳契序列的前六个数字是1,1,2,3,5和8。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
提示:此题不能用递归来实现斐波纳契数列。因为当num
较大时,内存会溢出,推荐用数组来实现。
要求:
sumFibs(1)
应该返回一个数字。
sumFibs(1000)
应该返回 1785。
sumFibs(4000000)
应该返回 4613732。
sumFibs(4)
应该返回 5。
sumFibs(75024)
应该返回 60696。
sumFibs(75025)
应该返回 135721。
问题答案:
var fibo = [1, 1];
var nums = 2;
var temp = 0;
while(true){
temp = fibo[0] + fibo[1];
if(temp > num){
return nums;
}
if(temp % 2 !== 0){
nums += temp;
}
fibo[0] = fibo[1];
fibo[1] = temp;
}
题目链接:
https://www.w3cschool.cn/codecamp/sum-all-odd-fibonacci-numbers.html