Recursion C语言中使用递归的阶乘

Recursion C语言中使用递归的阶乘,recursion,factorial,Recursion,Factorial,我们都知道这方面的计划 int fact(int n) { if(n==0) return(1); return(n*fact(n-1)); } 但我不清楚的是内在的事情是如何发生的 如何计算5*4*3*2*1(如果n为5) 请对此作出明确解释 感谢….从数学上讲,阶乘的递归定义可以这样递归表示(从: 考虑一下这对n=3的作用,使用=表示等价: 3!==2! * 3==(1!*2)*3==(1)*2)*3 这可以通过重复应用递归规则来纯粹象征性地导出 这个定义的作用是首

我们都知道这方面的计划

int fact(int n)
{
  if(n==0)  
    return(1);

  return(n*fact(n-1));
}
但我不清楚的是内在的事情是如何发生的

如何计算
5*4*3*2*1
(如果n为5)

请对此作出明确解释


感谢….

从数学上讲,阶乘的递归定义可以这样递归表示(从:

考虑一下这对
n=3
的作用,使用
=
表示等价:

3!==2! * 3==(1!*2)*3==(1)*2)*3

这可以通过重复应用递归规则来纯粹象征性地导出


这个定义的作用是首先将给定的阶乘展开为一个等价的乘法序列。然后执行实际的乘法运算。您使用的C代码执行的方式完全相同。

有助于理解它的是,当您递归调用函数时,新的“循环”将使用N-1,而不是N。 这样,一旦到达N==0,调用的最后一个函数将返回1。此时,所有函数堆栈都在等待嵌套函数的返回。这就是现在将堆栈上每个函数的结果精确相乘的方式。
换言之,您可以将作为输入的数字分解。

检查我的答案:您是否使用调试器进行了调试?你会看到的。