使用rest运算符的递归函数不在JavaScript中返回

时间:2017-04-30 02:30:34

标签: 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)

如果在第一个console.log(x)语句中添加if,您将看到正确的答案,但是当您运行该函数时,它会返回undefined,因此在递归链中的位置它迷路了吗?我相信这个递归函数的基本情况是正确的,但我想要一些见解。

2 个答案:

答案 0 :(得分:1)

您必须从else返回。

function f(x, ...y) {
    if (!y.length) {
        return x;
    } else {
        x += y.shift();
        return f(x, ...y);
//      ^^^^^^^
    }
}

在您的代码中,如果y.length !== 0您在else块中,则调用应返回值的f,但不会将该值返回给f 1}}。

答案 1 :(得分:0)

您需要将该功能返回给自己:

return f(x, ...y);

function f(x, ...y) {
  if (!y.length) {
    return x;
  } else {
    x += y.shift();
    return f(x, ...y);
  }
}

console.log(f(0, 2, 4, 7, 8, 4))