Re: [問卦] 寫程式會用遞迴 大概是什麼程度?
※ 引述《utomaya (烏托馬雅)》之銘言:
: 一個在程式語言界有名的人說了一句話:「遞迴只在天上有,凡人應該用迴圈」
: 可能對方是名人,大家都奉為圭臬
: 我一點都不同意
: 舉個簡單例子好了
: 一個陣列a[]取任意3個,用迴圈怎麼寫?
: for(int i=0;i<a.size();i++)
: {
: for(j=i+1;j<a.size();j++)
: {
: for(k=j+1;k<a.size();k++)
: {
: //.....
: //以下做特殊處理
: }
: }
: }
這是保守、安全的寫法
請不要小看它
並且多了解
編譯器的最佳化
也不要小看編譯器最佳化
因為他能幫你優化這個"有限迴圈"
原PO說的遞歸
的確是可以簡化程式不少
讓我想到刷提二元樹反轉的時候
這個很好用
參考:
https://tinyurl.com/2p89ndhx
拉回正題 刷提/考試好用
但實際上?
以原PO上一篇說的 當例子
: void recur(int tl, int level, int start)
: {
: if(level==0)
: {
: //以下做特殊處理
: // ......
: return;
: }
: for(int i=start;i<a[].size();i++)
: {
: recur(tl,level-1,i+1);
: }
: }
: 在最後一層幹掉就好
: 我在ProjectEuler很常用到這種遞迴
我們調用它
int main()
{
recur(隨便數字, 狗幹大的數字, 隨便數字);
}
你編譯通過了
一些機器執行
卻跑出
https://zh.wikipedia.org/wiki/Stack_Overflow
沒錯
鼎鼎大名的stackoverflow
名稱就是這樣來的
你在stackoverflow
還是能找到不少關於
遞歸造成stackoverflow的例子
總之
遞歸慎用
特別是要遞歸很多次
並且你的函式偏複雜
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.24.178.242 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1676385774.A.FD1.html
推
02/14 22:50,
1年前
, 1F
02/14 22:50, 1F
推
02/14 22:57,
1年前
, 2F
02/14 22:57, 2F
推
02/14 23:02,
1年前
, 3F
02/14 23:02, 3F
推
02/14 23:23,
1年前
, 4F
02/14 23:23, 4F
→
02/14 23:23,
1年前
, 5F
02/14 23:23, 5F
推
02/15 00:11,
1年前
, 6F
02/15 00:11, 6F
推
02/15 10:07,
1年前
, 7F
02/15 10:07, 7F
討論串 (同標題文章)