因子在C中使用递归

时间:2013-09-13 10:41:55

标签: recursion factorial

我们都知道这个程序

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

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

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

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

请对此作出明确解释。

感谢.....

2 个答案:

答案 0 :(得分:2)

在数学上,factorial的递归定义可以像这样递归地表达(来自Wikipedia):

recursive factorial definition

考虑这对n = 3的工作原理,使用==来表示等价:

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

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

这个定义的作用是首先将给定的阶乘扩展为等效的乘法系列。然后它执行实际的乘法。您拥有的C代码执行方式完全相同。

答案 1 :(得分:0)

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