我试图理解递归,并找到以下内容作为对freecodecamp递归练习进行数字分解的答案。是正确的,但我不知道它是如何运行的。


-如果'return 1'退出功能,那么输出不应该为1吗?
-所需的模式(如果为10x9x8x7等)。但是,如果每次都调用自己,是否不遵循模式10x9、9x8、8x7等?


抱歉,如果这不是一个合适的问题,请首次使用。

function factorialize(num) {
  if (num === 0) { return 1; }
  return num * factorialize(num-1);
}

factorialize(5);
>120

最佳答案

由于递归函数的各个结果是累积的,因此可以通过以下方式想象这一过程:


调用factorialize(5);
第一个递归步骤返回-> 5 * factorialize(4)


  当前值:5 *因数分解(4)

第二个递归步骤返回-> 4 * factorialize(3)


  当前值:5 * 4 *因数分解(3)

第三递归步骤返回-> 3 * factorialize(2)


  当前值:5 * 4 * 3 *因式分解(2)

第四递归步骤返回-> 2 * factorialize(1)


  当前值:5 * 4 * 3 * 2 *因数分解(1)

第六个递归步骤返回-> 1 * factorialize(0)


  当前值:5 * 4 * 3 * 2 * 1 *因式分解(0)

第七个(最后一个)递归步骤返回-> 1


  当前值:5 * 4 * 3 * 2 * 1 * 1



结果为120。

function factorialize(num) {
  if (num === 0) { return 1; }      // 7th step
  return num * factorialize(num-1); // 1st to 6th step
}

09-28 03:19