Javascript 使用递归对数字进行因式分解

Javascript 使用递归对数字进行因式分解,javascript,recursion,Javascript,Recursion,我试图理解递归,并发现下面是一个freecodecamp递归练习的答案,可以将一个数字进行因式分解。这是正确的,但我不明白它是如何运行的 -如果“return 1”退出函数,那么输出不应该是1吗 -如果是10x9x8x7等,则为所需的模式。但如果它每次调用自身,则不遵循10x9、9x8、8x7等模式吗 抱歉,如果这不是一个合适的问题,请第一次使用 function factorialize(num) { if (num === 0) { return 1; } return num

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

  • -如果“return 1”退出函数,那么输出不应该是1吗
  • -如果是10x9x8x7等,则为所需的模式。但如果它每次调用自身,则不遵循10x9、9x8、8x7等模式吗
抱歉,如果这不是一个合适的问题,请第一次使用

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

factorialize(5);
>120

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

  • 调用因子化(5)
  • 第一个递归步骤返回->5*因子化(4) 当前值:5*因子化(4)

  • 第二个递归步骤返回->4*因子化(3) 当前值:5*4*因子化(3)

  • 第三个递归步骤返回->3*因子化(2) 当前值:5*4*3*因子化(2)

  • 第四个递归步骤返回->2*因子化(1) 当前值:5*4*3*2*因子化(1)

  • 第六个递归步骤返回->1*因子化(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
    }
    

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

  • 调用因子化(5)
  • 第一个递归步骤返回->5*因子化(4) 当前值:5*因子化(4)

  • 第二个递归步骤返回->4*因子化(3) 当前值:5*4*因子化(3)

  • 第三个递归步骤返回->3*因子化(2) 当前值:5*4*3*因子化(2)

  • 第四个递归步骤返回->2*因子化(1) 当前值:5*4*3*2*因子化(1)

  • 第六个递归步骤返回->1*因子化(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
    }
    

    迭代编写函数可能有助于澄清问题;循环中的每一步都相当于一个递归调用

    函数因式分解(num){
    设阶乘=1;//基本情况,等价于事实(0)
    
    for(设i=1;i迭代编写函数可能有助于澄清问题;循环中的每个步骤相当于一个递归调用

    函数因式分解(num){
    设阶乘=1;//基本情况,等价于事实(0)
    
    for(设i=1;i1返回1,2返回2*(1),3返回3*(2*(1)),等等(我用括号表示函数本身对函数的调用)具有
    return 1
    的最后一个调用不会作为第一次调用
    factorialize
    的结果返回。它只是作为上一次调用
    factorialize(num-1)
    的结果返回,然后该结果乘以相应的
    num
    并作为上一次
    factorialize(num-1)的结果返回
    乘以相应的
    num
    …依此类推,直到我们到达第一个调用
    factorialize
    。到那时,所有的阶乘都已经计算出来了。1返回1,2返回2*(1),3返回3*(2*(1)),等等。(我用括号表示对函数本身内函数的调用)具有
    返回1
    的最后一个调用不会作为对
    factorialize
    的第一个调用的结果返回。它只是作为对
    factorialize(num-1)的上一个调用的结果返回
    然后乘以相应的
    num
    并作为上一个
    因子化(num-1)的结果返回
    乘以相应的
    num
    …依此类推,直到我们第一次调用
    factorialize
    。到那时,所有的factorial都已经计算出来了。