[问题] 所有的循环一定能转递回写法?

楼主: 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