使用递归对数字进行因式化

Fox*_*rts 1 javascript recursion

我试图理解递归,并发现下面作为freecodecamp递归练习的答案来对一个数字进行因式分解.这是正确的,但我不明白它是如何运行的.

  • - 如果'return 1'退出该函数,则输出不应为1?
  • - 如果10x9x8x7等所需的模式.但如果它每次调用自己不遵循模式10x9,9x8,8x7等?

对不起,如果这不是一个合适的问题,请第一次使用.

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

factorialize(5);
>120
Run Code Online (Sandbox Code Playgroud)

oRo*_*ole 5

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

  1. call factorialize(5);
  2. 第一次递归步骤返回 - > 5*factorialize(4)

    当前值:5*factorialize(4)

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

    当前值:5*4*factorialize(3)

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

    当前值:5*4*3*factorialize(2)

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

    当前值:5*4*3*2*factorialize(1)

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

    当前值:5*4*3*2*1*factorialize(0)

  7. 第七个(最后一个)递归步骤返回 - > 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
}
Run Code Online (Sandbox Code Playgroud)