c - main() 递归的不可预测的输出

标签 c recursion

以下代码使用代码块将输出输出为 0 0 0 0。

int main()
{
 static int i=5;
 if(--i){
    main();
    printf("%d ",i);
 }   
}

我完全理解上面的代码是如何执行的。然而,当我从代码中删除“static”并使用 int i = 5 时,Ideone.com(在线编译器)给了我运行时错误,而 Codeblocks(使用 GCC)没有给我任何东西 - 甚至终端也没有弹出。

我还尝试将声明部分放在 main 之外,即 static int i;然后在 main 中,我给出了 i = 5;。尽管如此,我还是收到了上述错误。我不知道发生了什么事。任何帮助将不胜感激。

PS:该程序是在网站上找到的,但没有给出任何解释。

最佳答案

如果您删除静态,则每次对 main 的调用都会获得自己的 i 副本,并初始化为 5,因此您的递归永远不会终止。

关于c - main() 递归的不可预测的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532515/

相关文章:

c - 如何使用libpcap嗅探PPP数据包?

c - void 函数中的递归过程

python - 如何在python中编写递归函数

c - printw() 在 while 循环中不起作用

c++ - 混合使用 C 和 C++ 时出现重复符号

javascript - 循环和递归 : the difference in the number of repetitions

c++ - 转换为递归函数?

c - 大量递归函数背后实际上发生了什么?

c - 宏中的可变参数

c - 关于在 C 中使用递归