在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))这很奇怪–我每天都会看到一个关于简单递归函数的问题,答案是“在递归调用之前,您缺少了一个
返回