这段代码在C语言中的执行顺序是什么(1< recursions)

问题描述 投票:0回答:1
#include <stdio.h>

int zad1(int k){
    if (k <= 2) 
        return 0;
    printf("k = %d\n", k);
    zad1(--k);
    zad1(k-1);
    printf("k = %d\n", k);
}

void main(){
    zad1(4);
}

我是一名学生,我们使用 GCC 编译器(CodeBlocks),我确实得到了 k=4 和 k=3 输出,但是接下来会发生什么呢?我是一个初学者,所以我希望对执行的确切顺序有一个非常简单的解释。另外请原谅我的英语,因为它不是我的母语,所以我不确定我的条款是否正确。

c recursion
1个回答
0
投票

正如其他人在评论中指出的那样,您可以通过使用调试器或使用

"printf()"
来查看程序的行为。

但是在这里具体回答你的问题是你的代码会发生什么:

  1. zad1(4)
    main
    函数调用
  2. 对于
    zad1(4)
    ,它打印“k=4”并调用
    zad(--k);
    ,同时“k”减少到3。
  3. 对于
    zad1(3)
    ,它打印“k=3”并调用
    zad(--k);
    ,同时“k”减少到2。

正如您所提到的,您了解到目前为止发生的事情。我们继续:

  1. 对于
    zad1(2)
    if
    语句被触发并立即返回,而不打印任何内容

此调用现已完成,因此控件将返回到上一个调用,即

zad1(3)

  1. zad1(k-1)
    被调用,
    k-1
    为 3-1 = 2。

  2. 现在,我们有

    zad1(2)
    打印“k=2”(因为触发了
    if
    语句)并返回

此调用现在也已完成,因此控件返回到初始调用,即

zad1(4)

  1. 它执行第二次出现的
    print
    语句,并打印“k=3”。

这样,原来的调用就完成了,控制权又回到了

main
函数。

我希望有帮助;)

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