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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM