在JavaScript中使用rest运算符不返回的递归函数
假设您想要编写一个递归函数,该函数接受一个累加器和任意数量的整数作为参数,并且希望在所有参数求和后返回累加器。我试图表达如下:在JavaScript中使用rest运算符不返回的递归函数,javascript,recursion,arguments,Javascript,Recursion,Arguments,假设您想要编写一个递归函数,该函数接受一个累加器和任意数量的整数作为参数,并且希望在所有参数求和后返回累加器。我试图表达如下: function f(x, ...y) { if (!y.length) { return x; } else { x += y.shift(); f(x, ...y); } } f(0,2,4,7,8,4) 如果在第一个If语句中添加console.log(x),您将看到正确的答案,但是当您运行函数时,它返回undefin
function f(x, ...y) {
if (!y.length) {
return x;
}
else {
x += y.shift();
f(x, ...y);
}
}
f(0,2,4,7,8,4)
如果在第一个
If
语句中添加console.log(x)
,您将看到正确的答案,但是当您运行函数时,它返回undefined
,因此它在递归链中的何处丢失?我相信这个递归函数的基本情况是正确的,但我想了解一些情况 您必须从else
返回
function f(x, ...y) {
if (!y.length) {
return x;
} else {
x += y.shift();
return f(x, ...y);
// ^^^^^^^
}
}
在代码中,如果
y.length!==0
然后您在else
块中,调用f
,该函数应返回一个值,但不会将该值返回到任何调用的f
您需要将函数返回到自身:
return f(x, ...y);
函数f(x,…y){
如果(!y.长度){
返回x;
}否则{
x+=y.shift();
返回f(x,…y);
}
}
log(f(0,2,4,7,8,4))这很奇怪–我每天都会看到一个关于简单递归函数的问题,答案是“在递归调用之前,您缺少了一个
返回
”