To Iterate is human, to recurse, divine.
遞迴真的有點難懂,
雖然效率較低,
常常stack overflow,
不過一些程式碼硬要寫成迴圈,
似乎可讀性會降低。
大家覺得遞迴是很吃天份的東西嗎,
怎樣的鍛鍊方式能夠讓使用遞迴得心應手?
小弟是個費式數列都寫不出來的遞迴白癡,
有請大大分享心得。
或是建議不要寫遞迴這種鬼東西?
作者: yotsuba1022 (Carl) 2016-08-20 19:42:00
Then I think you should be a human.
作者: profiles (pforileS) 2016-08-20 19:44:00
想練遞迴,可用LISP語言
作者:
Eleina (艾琳娜)
2016-08-20 19:56:00遞迴就像金門沙堆中的炸彈 炸死無辜接手的後人
作者: manaup 2016-08-20 19:58:00
遞迴很基本好嘛 有些程式叫我改寫成迴圈版本我還要想一下
之前再看Functional programming in scala就是強制要你練習不要用迴圈 習慣了就好
作者:
testPtt (測試)
2016-08-20 20:04:00還有goto可以用
作者:
O187 (187cm)
2016-08-20 20:12:00沒人用? findcontrol表示
作者:
drajan (EasoN)
2016-08-20 20:25:00寫題目 例如leet code 試著用遞迴去解
作者:
kyleJ (資工人)
2016-08-20 20:45:00確定深度不會太深的時候遞迴很好用啊
作者:
johnny94 (32767)
2016-08-20 21:03:00畢業許久,我到河內塔還是搞不懂…
作者: SoftMen (軟男) 2016-08-20 21:06:00
哪裡沒人用? 只是你剛好用不到吧
作者:
yyc1217 (somo)
2016-08-20 21:31:00的確很久沒用過遞迴了 迴圈的可讀性比較高
寫個 merge 跟 quick sort 迴圈版來看看就好,寫死你..
作者:
pttworld (批踢踢世界)
2016-08-20 21:44:00開發速度的差別。
費式數的遞迴都寫不出來,那演算法,計算理論都 bye 了.簡單的遞迴並不難學會,方法如下:
作者:
johnny94 (32767)
2016-08-20 21:59:00f(a){if(a == 0) return else f(--a)}
作者: shaform (Shaform) 2016-08-20 22:04:00
嫩嫩我迴圈,大大你遞迴
作者:
CoNsTaR ((const *))
2016-08-20 23:29:00去玩玩看函數式語言 只有遞迴能用 XDD遞迴和迭代的適用時機不同啊 不能這樣比較
作者:
yyc1217 (somo)
2016-08-20 23:38:00sort都有現成的可以用 幾乎沒寫過
作者: Keade0325 (pinpin) 2016-08-21 00:09:00
爬未知的組織樹層級資料還不錯
作者:
drm343 (一卡)
2016-08-21 00:15:00看語言,多數語言不適合用遞迴的方式思考
作者:
typepeter (∵Peter∴笑點)
2016-08-21 00:20:00實務上 函數式語言很常用的遞迴難是因為終止及判斷式不容易 沒想清楚可能爆炸
作者: dnabossking (少狂) 2016-08-21 00:31:00
遞迴只該天上有,凡人該當用迴圈
作者:
descent (「雄辯是銀,沉默是金」)
2016-08-21 01:00:00C程序设计的抽象思维,後半段都在教遞迴
用遞迴很容易stack overflow吧 至少要用迴圈+stack解決
作者:
descent (「雄辯是銀,沉默是金」)
2016-08-21 01:01:00遞迴是值得投資的程式技巧
作者:
wuliou (wuliou)
2016-08-21 01:23:00通常我可以用迴圈就不會用遞迴 就算自己懂後人難改啊
作者: TTben (TTben) 2016-08-21 01:36:00
實務上沒人用遞迴,認同+1
遞迴的可讀性比較高吧??Recursion:Readability conciseness maintainabilityIteration:Performance and avoid stack overflow
作者:
Eleina (艾琳娜)
2016-08-21 02:35:00老外說的是否有加分我不知道 我只知道離散數學裡的題幹很容易理解 最終得出的遞迴關係乍看很難懂
作者: TETZ (你今天宅了嗎?) 2016-08-21 07:18:00
寫久就有sense了我以前也覺得很苦手但工作久了就覺得還好但我也只有非要遞迴不可時才用可以用迴圈就用迴圈
作者:
bigpigbigpig (To littlepig with love)
2016-08-21 09:21:00以前都沒人告訴我遞迴很難,一不小心就學會了,拍謝
作者: jimwayne123 (曼陀羅) 2016-08-21 09:43:00
遞迴可讀性較高吧 +1...
作者: storyn26383 (販賣機) 2016-08-21 11:08:00
有些東西用遞迴寫超簡單啊,例如樹的走訪
"頂多" 而且迴圈還有stack會滿的風險而且那個頂多是能最佳化狀況講錯 遞迴有會滿的風險編譯器會最佳化迴圈 實際上效能是天差地遠所以我說頂多跟迴圈一樣 唯一例外是tail recurrsion除非你每個都寫成tail recurrsion
看狀況 有些狀況真的遞迴比較適合 也沒必要都寫成迴圈
作者:
GlinX (...無盡的終點...)
2016-08-21 14:31:00遞迴的確是比較好讀的 而且有時候迴圈內的邏輯要做成可於子類別擴充時比較困難 就跟Stream API一樣一整坨在那裡前面k大貼的連結的第二篇回文也說了 I love recursion 但不適合用在沒有為遞迴tune過的程式語言上 例如Java
作者: RapidGrowth (Jasper) 2016-08-21 16:53:00
In order to understand recursion, one must firstunderstand recursion我想遞迴應該是開發起來很爽,寫完base cases就等於寫完整個程式了。開發速度快,成本低,效能之後再優化就好。
作者:
jackyu (孫權)
2016-08-21 17:34:00然後效能優化的最終版本就是寫成迴圈
作者:
aoc5000 (香蕉)
2016-08-21 18:01:00看一些ACM題目 強迫自己用遞迴寫
我反而覺得遞迴比較好懂耶 可讀性高+1..表達又powerful
作者:
LaPass (LaPass)
2016-08-21 22:11:00為什麼看推文會覺得遞迴好像很難的感覺..... 明明遞迴可以很優雅的幹掉很多麻煩的問題啊....
作者: RapidGrowth (Jasper) 2016-08-21 22:34:00
我想大概是很多人根本不懂遞迴吧。我的話還被亂總結
作者:
konanno1 (konanno1)
2016-08-21 23:05:00console.log((fac=(n,T)=>n==0?T:fac(n-1,n*T))(3,1));學遞迴順便學JavaScript好了,stack overfollow免驚。
作者:
alog (A肉哥)
2016-08-22 01:48:00因為很久以前有些前輩認為遞迴很危險 所以很多技術分享都會講的很恐怖這樣實際上說穿了就是對遞迴的掌握跟開發經驗不足所以才會有這種奇怪的都市傳說冒出來都快跟機房放乖乖的傳說差不多了怕stack overflow 那測試跟抑制的部分要寫好現實的狀況也沒那麼多時間讓你糾結要用迴圈還是遞迴
作者:
yenru (戴菲娜)
2016-08-22 08:14:00有些程式不用遞回無法解啊…
作者:
feeya (24 August 升格為鄉民)
2016-08-22 11:31:00掃資料夾檔案的功能就可以用遞迴
理論上所有recursive可以用loop+stack/queue替代更何況stack size會隨著你delopy的環境大小會有差這就是為什麼實作上鮮少有人用recursive的原因
tail recuesion 也是要 compiler 優化雖然那是滿基本的優化 但怎麼確定你的編譯器一定有
作者:
louner (louner)
2016-08-24 19:36:00leetcode上所有跟tree有關的題目都刷過一遍,你就會得了不用遞迴就會死的病了