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語言本身沒有限制。
