[問題] 所有的迴圈一定能轉遞迴寫法?

作者: alfadick (悟道修行者)   2014-06-20 21:29:47
長話短說,最近在學functional programming,
書上說 haskell 沒有支援 loop (希望我沒會錯意)。
因此舉凡我想要做的任何事,費式數列、河內塔等都只能用遞迴寫,
這沒差,我用C也應該會用遞迴。
但萬一是什麼九九乘法表啦、 找出一個array中哪個數字最大啦、
印出 * 啦,都一律只能用遞迴寫,我會不會瘋掉阿@@
***
*****
*******
瘋掉也不是重點,重點是如果有些迴圈邏輯上不能轉成遞迴怎麼辦?
我想問的就是這個。
Q1. 所有的迴圈都可以改成遞迴?若是,有辦法給出證明嗎?
Q2. 所有的遞迴都可以改成迴圈?若是,有辦法給出證明嗎?
如果可以用迴圈辦到的,在functional programming的世界裡都要靠遞迴,
不知道會不會瘋掉..
感覺這個問題比較偏這個版,如果用一些C的code 當範例說明是可以的
感謝大家~
作者: LPH66 (-6.2598534e+18f)   2014-06-20 21:32:00
有個版叫 Programming 版, 另外你可以查一下 tail recursion
作者: suhorng ( )   2014-06-20 21:54:00
Q1 跟 Q2 都可以, 但是推文空白太小了我寫不下完整證明另, 最後 "都要靠遞迴" 的部份, Haskell算是有其他的習慣
作者: alfadick (悟道修行者)   2014-06-20 21:56:00
謝謝兩位~ 那如果以C為例, 迴圈轉遞迴有SOP嗎喔喔?
作者: suhorng ( )   2014-06-20 21:57:00
例 forM_ [1..5] (putStrLn . flip replicate '*') --猩猩Q1 跟 Q2 都有 SOP我晚點可以回覆XD (或是在 Programming 板回)
作者: EdisonX (卡卡獸)   2014-06-20 23:07:00
Q1 : loop 用 tail recursive 寫Q2 : recursive 可把參數包起來 , 用 queue 模擬。
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-06-20 23:24:00
空白太小了寫不下是等450年後的人幫忙寫出來的意思嗎 :D
作者: KoenigseggG (地表最速)   2014-06-21 00:13:00
覺得suhorng推文很有哏XD
作者: PUTOUCHANG (自己的廢文自己發)   2014-06-21 00:32:00
用遞迴寫迴圈... 用 XSL 嘗試就有感覺了
作者: xcycl (XOO)   2014-06-21 18:51:00
事實上遞歸的寫法通常比較精簡 ...

Links booklink

Contact Us: admin [ a t ] ucptt.com