因子在C中使用递归

问题描述 投票:0回答:2

我们都知道这个计划

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

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

但是我不清楚的是内在的事情是怎么发生的?

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

请对此作出明确解释。

谢谢.....

recursion factorial
2个回答
2
投票

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

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

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.