友情链接 Doge博客 gunpowder博客 东北小蟹蟹博客

c语言函数最大能递归的次数多少

date 2020/3/24

int main(){
main();
}

这是一小段c代码,但是,main函数不能被除系统之外的东西调用,这属于UB行为
它如何运行完全靠编译器,所以我不会这样写。

#include <stdio.h>
void Main(unsigned long long t);
int main()
{
Main(0);
}
void Main(unsigned long long t)
{printf("第%llu次递归\n",t);Main(++t);
}

这样写才不会被编译器报UB行为。




运行这段代码

显然,我们可以得到c语言函数最大能递归的次数是43179
但是请注意右角的程序异常返回值

程序异常退出了。

再用 www.onlinegdb.com 运行一下代码
神奇的事情发生了:

相同的代码,运行结果竟然是不同的。
从异常返回值我们可以推断,程序堆栈溢出了。
得出结论:
不同的系统,程序堆栈大小不同,可递归的次数也就不同,c语言函数最大能递归的次数是未知的。
而C语言本身没有限制。

posted @ 2020-03-27 08:50  Ruptpsych  阅读(1520)  评论(0编辑  收藏  举报