这里哈斯克尔尾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