递归函数在JavaScript中返回未定义的原因?

108 阅读1分钟

在掌握递归的时候,一个常见的挫折是不明白为什么你的递归函数会返回未定义。

通常,这是因为你没有在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什么。