首页 > 解决方案 > 使用递归对 1 和 num 之间的所有数字求和

问题描述

第一篇文章,所以我尽量遵守这里的规则。我正在尝试编写一个简单的函数,该函数使用递归来返回 1 和 num 之间所有数字的总和。我已经看到了这个解决方案,我知道它是如何工作的,但我不明白为什么这个解决方案不起作用。任何反馈表示赞赏。

const sumNums = (num) => { 
  let total = 0;
  if(num >= 1) {
    total += num;
    sumNums(num-1);
  }
  return total; 
}
console.log(sumNums(5)); // <-- returns 5

标签: javascriptrecursion

解决方案


您的特定解决方案不起作用,因为您没有返回if 分支中的内容。你只有一个回报,这就是为什么你会得到你传入的参数。您还需要添加内部调用才能使其正常工作。

适当的解决方案已经在这里

编辑:我刚刚注意到您明确想要进行递归,这是一个带有(尾)递归的片段。

function sumNumsTailRec(n, acc = 0) {
    if (n === 0) return acc
    return sumNumsTailRec(n-1, acc + n)
}

推荐阅读