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

看板C_and_CPP (C/C++)作者 (悟道修行者)時間11年前 (2014/06/20 21:29), 11年前編輯推噓6(608)
留言14則, 8人參與, 最新討論串1/1
長話短說,最近在學functional programming, 書上說 haskell 沒有支援 loop (希望我沒會錯意)。 因此舉凡我想要做的任何事,費式數列、河內塔等都只能用遞迴寫, 這沒差,我用C也應該會用遞迴。 但萬一是什麼九九乘法表啦、 找出一個array中哪個數字最大啦、 印出 * 啦,都一律只能用遞迴寫,我會不會瘋掉阿@@ *** ***** ******* 瘋掉也不是重點,重點是如果有些迴圈邏輯上不能轉成遞迴怎麼辦? 我想問的就是這個。 Q1. 所有的迴圈都可以改成遞迴?若是,有辦法給出證明嗎? Q2. 所有的遞迴都可以改成迴圈?若是,有辦法給出證明嗎? 如果可以用迴圈辦到的,在functional programming的世界裡都要靠遞迴, 不知道會不會瘋掉.. 感覺這個問題比較偏這個版,如果用一些C的code 當範例說明是可以的 感謝大家~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.136.209.22 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1403270990.A.A0F.html ※ 編輯: alfadick (220.136.209.22), 06/20/2014 21:31:32

06/20 21:32, , 1F
有個版叫 Programming 版, 另外你可以查一下 tail recursion
06/20 21:32, 1F

06/20 21:54, , 2F
Q1 跟 Q2 都可以, 但是推文空白太小了我寫不下完整證明
06/20 21:54, 2F

06/20 21:54, , 3F
另, 最後 "都要靠遞迴" 的部份, Haskell算是有其他的習慣
06/20 21:54, 3F

06/20 21:56, , 4F
謝謝兩位~ 那如果以C為例, 迴圈轉遞迴有SOP嗎
06/20 21:56, 4F

06/20 21:56, , 5F
喔喔?
06/20 21:56, 5F

06/20 21:57, , 6F
例 forM_ [1..5] (putStrLn . flip replicate '*') --猩猩
06/20 21:57, 6F

06/20 21:59, , 7F
Q1 跟 Q2 都有 SOP
06/20 21:59, 7F

06/20 22:00, , 8F
我晚點可以回覆XD (或是在 Programming 板回)
06/20 22:00, 8F

06/20 23:07, , 9F
Q1 : loop 用 tail recursive 寫
06/20 23:07, 9F

06/20 23:07, , 10F
Q2 : recursive 可把參數包起來 , 用 queue 模擬。
06/20 23:07, 10F

06/20 23:24, , 11F
空白太小了寫不下是等450年後的人幫忙寫出來的意思嗎 :D
06/20 23:24, 11F

06/21 00:13, , 12F
覺得suhorng推文很有哏XD
06/21 00:13, 12F

06/21 00:32, , 13F
用遞迴寫迴圈... 用 XSL 嘗試就有感覺了
06/21 00:32, 13F

06/21 18:51, , 14F
事實上遞歸的寫法通常比較精簡 ...
06/21 18:51, 14F
文章代碼(AID): #1Jf3TEeF (C_and_CPP)
文章代碼(AID): #1Jf3TEeF (C_and_CPP)