这是问题:
给定正整数num,返回小于或等于num的所有奇数斐波纳契数的总和。
斐波那契数列中的前两个数字是1和1。序列中的每个其他数字是前两个数字的总和。斐波那契数列的前六个数字是1、1、2、3、5和8。
例如,sumFibs(10)应该返回10,因为所有小于或等于10的奇数斐波那契数都是1、1、3和5。
这就是我尝试过的
function sumFibs(num, total = [1, 1], n = (total.length - 1 + total.length - 2)) {
if(n == num){
return total;
}
total.push(n);
sumFibs(num, n = (total.length - 1 + total.length - 2), total);
};
题
是否可以使用我的方法来完成这项工作,如果可以,该如何修复语法?如果没有,您将如何解决问题。
非常感谢!
四件事
(1)您不返回递归调用的结果,因此它永远不会传递给调用者:
sumFibs(4, [1, 1]) -> sumFibs(4, [1, 1, 2]) -> sumFibs(4, [1, 1, 2, 3])
<- [1, 1, 2, 3]
// v the return you do
// v the return you need too
(2)在递归调用中,参数顺序错误。
(3)我想不是要使用数组长度减去1,而是要访问total
数组中该位置的属性。
(4)为什么你实际上n
是在争论?由于它仅取决于total
,因此也可能只是一个变量:
function sumFibs(num, total = [1, 1]) {
const n = total[total.length - 1] + total[total.length - 2];
if(n > num){
return total;
}
total.push(n);
return sumFibs(num, total);
}
console.log(sumFibs(19));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句