为什么我声明的函数中的递归不起作用?
我试图理解递归。
我坚持以下几点:我需要将单个数字中的数字相加,所以如果我调用 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)