這裏哈斯克爾尾recusion是非尾遞歸函數多通話功能
alg :: Int -> Int
alg n = if n<7 then n else alg(n-1) * alg(n-2) * alg(n-4) * alg(n-6)
我一直停留在這一段時間,我得到的尾遞歸的基本概念,以及如何做到這一點的單調用遞歸函數,但不知道如何做多個調用。
即使想出了這個憎惡
algT :: Int -> Int
algT n = tail1 n 0 where tail1 i r = tail1(i-1) r *
tail2 n 0 where tail2 i r = tail2(i-2) r *
tail3 n 0 where tail3 i r = tail3(i-4) r *
tail4 n 0 where tail4 i r = tail4(i-6) r
它不工作,顯然不應該函數如何遞歸看,很少有其他的企圖,但他們都在無限的100%的CPU負載循環結束...
我什至不知道有一種方法,使這項嚴格尾遞歸。 – 2015-02-11 22:52:13
@LouisWasserman在我看來,應該可以獲得可以用循環尾部遞歸生成的任何序列的元素。 – genisage 2015-02-11 22:56:19
沒錯。你必須完全改變算法,但是,這不僅僅是一個簡單的轉換。 – 2015-02-11 22:57:09