c - 这个程序是如何执行的呢?

标签 c recursion static

#include <stdlib.h> 
#include <stdio.h> 
int main() 
{ 
    static int i = 5; 
    if(--i){ 
        main(); 
        printf("%d ",i); 
    }
    return 0;
}

上面代码的输出是 0 0 0 0。我一开始就明白为什么是 0,但是为什么 0 又打印了三次呢?

最佳答案

回想一下,static 变量在对 main 的所有调用之间共享。然后考虑递归执行的代码:

int main() {
    static int i = 5; // 5
    if (--i) { // 4
        main() {
            if (--i) { // 3
                main() {
                    if (--i) { // 2
                        main() {
                            if (--i) { // 1
                                 main() {
                                     if (--i) // 0 (false)
                                     return 0;
                                 }
                                 printf("%d ",i); // 0
                            }
                            return 0;
                        }
                        printf("%d ",i); // 0
                    }
                    return 0;
                }
                printf("%d ",i); // 0
            }
            return 0;
        }
        printf("%d ",i); // 0
    }
    return 0;
}

关于c - 这个程序是如何执行的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796298/

相关文章:

python - 更简单的递归代码比同一事物的迭代版本运行得更慢

java - Java 中来自静态上下文的模糊调用

c - 使用 C libwebsockets 将音频流保存在文件中

c - 4096 个 float 和 2 个选项哪个是最好的方法,为什么?

python - 嵌套字典对所有值求和

visual-studio - 从 MinGW 静态库 (.a) 到 Visual Studio 静态库 (.lib)

c++ - 链接器是否对静态符号或动态符号有任何偏好?

c - 以深度优先顺序递归遍历一般树

c++ - 使用 gcc 的 -lpthread 和 -lrt 集在 Eclipse 中编译

java - 如何求dfs+回溯算法的时间复杂度?