尝试使用递归来解决斐波那契(javascript)

AndrewNeeds帮助

这是问题

给定正整数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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章