输出窗口卡在黑屏上

时间:2011-03-31 11:41:55

标签: c recursion tail-recursion

#include<stdio.h>

int main()
{
    static int x;
    if(x == 10)
    printf("\n thanks...");
    x++;
    return (x=main());
}

在运行程序时,它会卡在输出上:

感谢...

这里有什么问题?

2 个答案:

答案 0 :(得分:5)

此递归没有终止条件。因此,您可以选择 - a - StackOverflow

也许这就是你想要尝试的:

#include<stdio.h>

int main(void)
{

    static int x;

if(x==10)
{
    printf("\n thanks...");
    return 0;  // --> Missing
}
x++;
return (x=main());
}

答案 1 :(得分:1)

我执行了程序,它实际上按预期崩溃了。 递归调用不停止,当堆栈段没有更多空间时,就会发生这种情况。

您没有崩溃的原因是由于编译器的优化设置。它检测尾递归并将它们转换为非循环。