递归函数 - 如何在这个阶乘解决方案中存储计数器?

时间:2016-02-22 11:26:10

标签: javascript recursion

在以下函数中,返回数字的阶乘,在递归调用函数时,如何存储数字的高位。

function factorialize(num) {
    if (num < 3) {
        return num;
    }
    return num * factorialize(num - 1);
}
factorialize(5);

我认为这是向后工作以达到5的因子,这是通过将所有正数乘以传递的数字得到的:

  

1 * 2 * 3 * 4 * 5获得结果

我很困惑每个乘法的结果是如何存储或计算的,以便不断地建立120的结果。

谢谢你们:)

1 个答案:

答案 0 :(得分:1)

该函数正在执行检查,然后调用自身。当它再次调用时,它会传递计算结果。

因此,每次调用factorialize(num - 1);时,num都将是上次调用的结果,计算将从该值中删除1并传递该新值。

一步一步是这样的:

  • 初始调用是factorialize(5),它使用参数5调用该函数。
  • 该函数检查5是否小于3(不是),如果不是,则再次调用自身。此时的参数是原始参数减1 - 所以4
  • 下一次,检查4是否小于3.如果不是,请再次呼叫4减1 - 3
  • 这一直持续到传入的参数小于3