想象一下,你想要编写一个递归函数,它将一个累加器和任意数量的整数作为参数,并且你想在所有参数求和后返回累加器。我想表达如下:
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
,因此在递归链中的位置它迷路了吗?我相信这个递归函数的基本情况是正确的,但我想要一些见解。
答案 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))