为什么我声明的函数中的递归不起作用?

我试图理解递归。

我坚持以下几点:我需要将单个数字中的数字相加,所以如果我调用 addUp(4) 它应该返回 10 (4+3+2+1)。

我想出了以下解决方案,但它不计算最后一个数字 (1)。我知道解决方案是将条件更改为“num===0”,但我没有看到区别:在我的脑海中,我的解决方案也应该有效。

function addUp(num) {
  if (num < 0) {
    return num;
  }
  return num + addUp(num - 1);
}

console.log(addUp(4)); // 9

回答

您需要检查是否小于或等于零。如果您也达到零,您也想停止。日志语句有助于识别这一点。

或者,您可以评估num < 1.

function addUp(num) {
  console.log(`Attempting to add: ${num}`);
  if (num <= 0) {
    return num;
  }
  console.log(`Added: ${num}`);
  return num + addUp(num - 1);
}

console.log(`Total: ${addUp(4)}`);
.as-console-wrapper { top: 0; max-height: 100% !important; }

代码高尔夫

下面的代码只有 19 个字节:

f=n=>n<1?n:n+f(n-1)


以上是为什么我声明的函数中的递归不起作用?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>