【发布时间】:2020-09-02 08:26:39
【问题描述】:
我的问题
给定一个正整数 num,返回所有小于或等于 num 的奇数斐波那契数的总和。
斐波那契数列的前两个数是 1 和 1。数列中的每个附加数都是前两个数的和。斐波那契数列的前六个数字是 1、1、2、3、5 和 8。
例如,sumFibs(10) 应该返回 10,因为小于或等于 10 的所有奇数斐波那契数都是 1、1、3 和 5。
我的答案
function sumFibs(num, total = [1, 1]) {
const n = total[total.length - 1] + total[total.length - 2];
if(n > num){
return total;
}
if(n %2 ==0){
total.push(n);
}
return sumFibs(num, total);
}
sumFibs(4);
问题
它一直说超出最大调用堆栈。我很确定这是因为第二个 if 语句。知道如何解决这个问题吗?
我什至试过这个:
function sumFibs(num, total = [1, 1]) {
const n = total[total.length - 1] + total[total.length - 2];
if(n > num){
return total;
}
let x = Array.from(n);
let y = x.filter((item)=>{
return item % 2== 0
})
total.push(...y)
return sumFibs(num, total);
}
sumFibs(4);
【问题讨论】:
-
total.push() 不起作用?
-
确实如此,抱歉我错过了。但是您必须计算所有斐波那契数,而不仅仅是奇数。 sum 只是奇数。
-
有趣的一点!这使得对所有奇数求和变得更加困难。也许这最容易通过递归函数之外的reduce和过滤器来实现(如果可以从函数中获取total)hmmm
-
函数 sumFibs(num, total = [1, 1]) { const n = total[total.length - 1] + total[total.length - 2]; if(n > num){ let answer = total.filter((item)=>{ return item % 2 == 0; }).reduce((totalII, filteredItems)=>{ return totalII + filteredItems }, 0) return答案 } total.push(n) return sumFibs(num, total); } sumFibs(4); (感觉差不多了!)
-
stackoverflow.com/questions/6037472/…时空O(1)的斐波那契,仅供参考。
标签: javascript algorithm recursion