在掌握递归的时候,一个常见的挫折是不明白为什么你的递归函数会返回未定义。
通常,这是因为你没有在return递归函数的下一次执行。我来告诉你我的意思。
比方说,我们正在编写一个阶乘函数。阶乘是一个数学运算符,一个数字要乘以每一个较低的数字。例如,4阶乘(写成4!)相当于4 * 3 * 2 * 1 = 24。
我们可以这样写一个递归阶乘函数。
function factorial(num, result = 1) {
if (num === 1) {
return result;
}
factorial(num - 1, num * result);
}
console.log(factorial(4));
// undefined
但这应该是24!为什么是undefined ?嗯,答案比我们想象的要简单:我们每次都需要return 下一次执行factorial 函数,否则我们永远不会得到最终的结果!
function factorial(num, result = 1) {
if (num === 1) {
return result;
}
return factorial(num - 1, num * result);
}
console.log(factorial(4));
// 24
这就是真的!这个 "秘密 "就是要确保,无论你在你的函数中走到哪条路,都要确保你在returning什么。