Javascript 使用递归对数字进行因式分解
我试图理解递归,并发现下面是一个freecodecamp递归练习的答案,可以将一个数字进行因式分解。这是正确的,但我不明白它是如何运行的Javascript 使用递归对数字进行因式分解,javascript,recursion,Javascript,Recursion,我试图理解递归,并发现下面是一个freecodecamp递归练习的答案,可以将一个数字进行因式分解。这是正确的,但我不明白它是如何运行的 -如果“return 1”退出函数,那么输出不应该是1吗 -如果是10x9x8x7等,则为所需的模式。但如果它每次调用自身,则不遵循10x9、9x8、8x7等模式吗 抱歉,如果这不是一个合适的问题,请第一次使用 function factorialize(num) { if (num === 0) { return 1; } return num
- -如果“return 1”退出函数,那么输出不应该是1吗
- -如果是10x9x8x7等,则为所需的模式。但如果它每次调用自身,则不遵循10x9、9x8、8x7等模式吗
function factorialize(num) {
if (num === 0) { return 1; }
return num * factorialize(num-1);
}
factorialize(5);
>120
由于递归函数的单个结果是累积的,因此可以用以下方式想象此过程:
function factorialize(num) {
if (num === 0) { return 1; } // 7th step
return num * factorialize(num-1); // 1st to 6th step
}
由于递归函数的单个结果是累积的,因此可以用以下方式想象此过程:
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都已经计算出来了。