首页 > 解决方案 > 递归函数的意外结果

问题描述

我遵循了整个执行的路径,根据我的计算,它应该返回 24,但实际上它返回 7

function factorial(x) {
    if (x < 0) return;
    if (x === 0) return 1;
    return x + 1 * factorial(x - 1);
  }

let x = factorial(3);

console.log(x); //7

我可能无法正确理解递归函数

标签: javascriptrecursion

解决方案


您似乎非常了解递归编程的基础知识,但是我不确定您是否完全理解阶乘函数的工作原理。

例如:

3!= 3*2*1 = 6

4!= 4*3*2*1 = 24

你可以用递归的方式来表达:

a(0) = 1

a(n) = a(n - 1) * n

在您的代码中实现此逻辑,您将获得以下信息:

function factorial(x) {
  if (x < 0) return;
  if (x === 0) return 1;
  return x * factorial(x - 1);
}

console.log(factorial(4))

按预期返回 24 。


推荐阅读