0

我们都知道这个程序

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

  return(n*fact(n-1));
}

但我不清楚的是内心的事情是如何发生的?

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

请对此作出明确的解释。

谢谢.....

4

2 回答 2

2

在数学上,阶乘的递归定义可以这样递归地表示(来自Wikipedia):

递归阶乘定义

考虑一下它是如何工作的n = 3,使用==to 表示等价:

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

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

这个定义首先将给定的阶乘扩展为等价的乘法序列。然后它执行实际的乘法运算。您拥有的 C 代码以完全相同的方式执行。

于 2013-09-13T17:51:52.930 回答
0

可能有助于理解的是,当您递归调用该函数时,新的“循环”将使用 N-1,而不是 N。 这样,一旦您到达 N==0,您调用的最后一个函数将返回a 1. 此时所有的函数栈都在等待嵌套函数的返回。这就是现在您如何将堆栈中每个函数的结果精确相乘。 换句话说,您将作为输入给出的数字分解。

于 2018-07-08T12:51:44.190 回答