#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 输出,但是接下来会发生什么呢?我是一个初学者,所以我希望对执行的确切顺序有一个非常简单的解释。另外请原谅我的英语,因为它不是我的母语,所以我不确定我的条款是否正确。
正如其他人在评论中指出的那样,您可以通过使用调试器或使用
"printf()"
来查看程序的行为。
但是在这里具体回答你的问题是你的代码会发生什么:
zad1(4)
由 main
函数调用zad1(4)
,它打印“k=4”并调用zad(--k);
,同时“k”减少到3。zad1(3)
,它打印“k=3”并调用zad(--k);
,同时“k”减少到2。正如您所提到的,您了解到目前为止发生的事情。我们继续:
zad1(2)
,if
语句被触发并立即返回,而不打印任何内容。此调用现已完成,因此控件将返回到上一个调用,即
zad1(3)
。
zad1(k-1)
被调用,k-1
为 3-1 = 2。
现在,我们有
zad1(2)
打印“k=2”(因为触发了 if
语句)并返回。
此调用现在也已完成,因此控件返回到初始调用,即
zad1(4)
。
print
语句,并打印“k=3”。这样,原来的调用就完成了,控制权又回到了
main
函数。
我希望有帮助;)