【问题标题】:Recursion in C Programming [duplicate]C编程中的递归[重复]
【发布时间】:2017-08-02 09:14:46
【问题描述】:

如果我们继续像这样重复调用,那将是一团糟:)

int fun() 
{
    static int num = 16;
    return num--;
}

int main()
{
    for (fun(); fun(); fun())
    printf("%d ", fun());
    return 0;
}

我知道静态的概念,但我想知道这个程序是如何工作的并打印输出:14 11 8 5 2

【问题讨论】:

  • 你的程序中没有递归。
  • 为了让你的程序有递归,你需要有一个调用自身的函数。
  • C 中没有 stack。如果我们假设一个实现使用 stack 进行函数调用,它仍然无趣:只有一个函数被调用反复。投票以“不清楚你在问什么”(但你可能想澄清)结束这个。

标签: c for-loop recursion static


【解决方案1】:

首先,您的程序中没有递归,因为根本没有调用自身的函数:func() 既没有调用func()main() 也没有调用main()


由于函数func()中的变量num被声明为static,所有对函数func()的调用共享变量num的一个副本。此变量仅初始化一次:第一次调用函数 func()。它的值在调用之间保留(这个变量没有分配在堆栈上)。

在以下循环中:

for (fun(); fun(); fun())
   printf("%d ", fun());

func() 在开始时被调用一次,在每次循环迭代中被调用 3 次

每次调用func()num 减一。因此,每次显示 func() 返回的值时,它都会减少 三个 相对于最后显示的值。

【讨论】:

    猜你喜欢
    • 2021-08-31
    • 2017-03-10
    • 2015-09-10
    • 2012-10-22
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多