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语言本身没有限制。
本文来自博客园,作者:Ruptpsych,转载请注明原文链接:https://www.cnblogs.com/obj-a/p/c-language-maximum-number-of-recursion.html