Javascript 递归的工作方式和原因以及内部发生的事情

Javascript 递归的工作方式和原因以及内部发生的事情,javascript,Javascript,这是一个简单的阶乘代码 console.log(`5 fact=${fact(5)}`) 函数事实(num){ 如果(num==0){ 返回1; }否则{ log(`${num}*fact(${num}-1)`) //console.log(num*fact(num-1)) 返回num*fact(num-1) } }好的,我会尽力回答你的问题 首先,你的代码有点混乱。所以改变它 console.log(`5 fact=${fact(5)}`) 函数事实(num){ log(`num=${nu

这是一个简单的阶乘代码

console.log(`5 fact=${fact(5)}`)
函数事实(num){
如果(num==0){
返回1;
}否则{
log(`${num}*fact(${num}-1)`)
//console.log(num*fact(num-1))
返回num*fact(num-1)
}

}
好的,我会尽力回答你的问题

首先,你的代码有点混乱。所以改变它

console.log(`5 fact=${fact(5)}`)
函数事实(num){
log(`num=${num}`)
如果(num==0){
log(`----令人困惑的是,为什么我没有返回1?----`)
返回1;
}否则{
log(`${num}*fact(${num}-1)`)
n=num*事实(num-1);
控制台日志(n);
返回n;
}

}
好的,我会尽力回答你的问题

首先,你的代码有点混乱。所以改变它

console.log(`5 fact=${fact(5)}`)
函数事实(num){
log(`num=${num}`)
如果(num==0){
log(`----令人困惑的是,为什么我没有返回1?----`)
返回1;
}否则{
log(`${num}*fact(${num}-1)`)
n=num*事实(num-1);
控制台日志(n);
返回n;
}

}
这是否回答了您的问题?在记录值时调用递归函数会弄乱递归。@dloeda临时结果将保存在哪里?我不明白。每个人都试图解释复发是如何发生的。但我在寻找内在的东西。是的,调用堆栈有一个依赖于实现的限制。我之前的评论解释了你得到的奇怪结果。@Teemu非常感谢你的回答。坦白说我还是个大学生。所以,你们能在回答部分简单介绍一下你们的答案吗?这能回答你们的问题吗?在记录值时调用递归函数会弄乱递归。@dloeda临时结果将保存在哪里?我不明白。每个人都试图解释复发是如何发生的。但我在寻找内在的东西。是的,调用堆栈有一个依赖于实现的限制。我之前的评论解释了你得到的奇怪结果。@Teemu非常感谢你的回答。坦白说我还是个大学生。所以,你们能在回答部分简单地介绍一下你们的答案吗。