【问题标题】:Factorial using recursion in C在 C 中使用递归的阶乘
【发布时间】:2013-09-18 00:35:57
【问题描述】:

我们都知道这个程序

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

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

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

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

请对此给出明确的解释。

谢谢.....

【问题讨论】:

标签: recursion factorial


【解决方案1】:

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

考虑这对n = 3 是如何工作的,使用== 表示等价:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-22
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2016-01-28
      • 1970-01-01
      • 2015-04-19
      相关资源
      最近更新 更多