即使没有调用这个递归函数,它是如何工作的?

How is this recursive function working even though it is not being called?

本文关键字:何工作 工作 调用 递归函数      更新时间:2023-10-16

我正在学习 c++,但我无法理解这种递归方法 我将尝试逐行解释

long factorial (long a)  

{
if (a > 1)
return (a * factorial (a-1));
else
return (1);
}

所以这是我的解释

long factorial (long a)  

此函数返回一个长 a

if (a > 1)
return (a * factorial (a-1));

因此,如果a> 1则返回afactorial (a-1)factorial (a-1)不是值。 我有点困惑

假设你在代码中的某个地方调用factorial(2)。将发生以下情况:

  1. 调用factorial函数时a等于 2。
  2. 该函数调用factorial (a-1)
  3. factorial的当前执行将挂起,并执行新实例。
  4. 在本例中,a为 1。
  5. 此实例将1返回到原始实例。
  6. 原始实例恢复并返回 2。

如果你调用factorial(3),同样的事情发生在外部实例在调用factorial (a-1)时变得2,从而返回3 * 2或 6。

(如果你不熟悉数学归纳证明,你可能没有足够的数学背景。你可以在没有足够的数学背景的情况下编程,但会困难得多,而且你能做的事情会非常有限。

阅读有关函数返回值的信息。基本上,阶乘 (a-1( 计算第 a-1 阶乘,然后返回其值。然后,将此返回值乘以 a。