Recursion 递归在调用堆栈的幕后是如何工作的?

Recursion 递归在调用堆栈的幕后是如何工作的?,recursion,Recursion,我理解递归的逻辑一个函数调用一个带有基格的函数然后终止,我这里有一个记录一个简单递归的代码,我不明白的是它在达到条件时开始记录,条件满足:0 函数因式分解(num){ 如果(num==0){ log('满足条件:'+num); 返回1; } var x=因子化(num-1);//迭代 var toReturn=num*x; console.log(“当前调用:num=“+num +“x=”+x +“\n” +“返回”+toReturn ); 回归回归; } 因子化(5); 我希望这段代码首先记

我理解递归的逻辑一个函数调用一个带有基格的函数然后终止,我这里有一个记录一个简单递归的代码,我不明白的是它在达到条件时开始记录,条件满足:0

函数因式分解(num){
如果(num==0){
log('满足条件:'+num);
返回1;
}
var x=因子化(num-1);//迭代
var toReturn=num*x;
console.log(“当前调用:num=“+num
+“x=”+x
+“\n”
+“返回”+toReturn
);
回归回归;
}
因子化(5);
我希望这段代码首先记录输出,最后达到条件

输出和

作为,它是

因为factorialize(5)调用factorialize(4),它调用factorialize(3),它调用factorialize(2),它调用factorialize(1),它调用factorialize(0)


然后所有的日志都会出现。

在递归中,首先进入,然后退出

递归
因式分解
调用之前的任何内容都将“进入”

在它之后的任何事情都在“出去”的路上

由于第二个
console.log
语句出现在递归调用之后,因此它在“out”过程中执行

您的第一个
console.log
语句位于
if
语句中。
if
语句出现在递归调用之前,因此它在“in”的过程中会在每一个级别进行测试,但它只在
console.log
语句到达井底时才执行。

要理解递归,您需要先理解递归咯咯笑为什么它首先记录基本情况@Vaxquis因为
factorialize(5)
调用
factorialize(4)
,它调用
factorialize(3)
,它调用
factorialize(2)
,它调用
factorialize(1)
,它调用
factorialize(0)
?你应该能够在纸上“执行”这段代码,以了解它是如何工作的。执行首先点击
console.log
。@vaxquis知道了,有没有办法在调试器上查看调用堆栈,或者如何记录它们?您能详细介绍一下调用堆栈吗?我对我的输出感到困惑,在最底层,它记录返回120。所以它返回120,但为什么在日志的第一行就满足了条件?当代码启动时,它第一次进入函数。检查返回false并暂停函数执行以再次输入的if。。。依此类推,直到最后一次调用打印出“条件满足”,它结束函数并从最后一次函数调用继续到完成,所以它打印下一个日志,然后再次继续最后一次函数调用并再次打印,直到执行为止terminates@vaxquis谢谢你的邀请edit@Yitschak没问题,伙计。