我很难看到这个功能是如何运作的。对于第n个数,它应该计算前三个元素的总和。
f' :: Integer->Integer
f' = helper 0 0 1
where
helper a b c 0 = a
helper a b c n = helper b c (a+b+c) (n-1)
感谢您的时间
答案 0 :(得分:7)
也许您缺少的部分是
f' = helper 0 0 1
与
相同f' x = helper 0 0 1 x
否则,请参阅戴夫的回答。
答案 1 :(得分:5)
这是一个相当简单的递归函数。当用三个元素(我猜测序列的种子)和许多术语调用时,它调用自身,将种子循环一个并添加新术语(a + b + c)。当“剩余步数”计数器达到0时,边缘情况开始并且仅返回当前序列值。该值被传递回所有函数调用,给出最终输出。
f'
函数围绕helper
函数提供了一个简单的包装(它完成了我上面描述的工作),提供了一个标准种子并将所请求的术语作为第4个参数传递(MathematicalOrchid很好地解释了这一点) )。
答案 2 :(得分:4)
用f' 5
下面是它将被执行的顺序:
迭代1:助手0 0 1 5
迭代2:辅助0 1(0 + 0 + 1)4
迭代3:辅助器1 1(0 + 1 + 1)3
迭代4:助手1 2(1 + 1 + 2)2
迭代5:辅助2 4(1 + 2 + 4)1
迭代6:辅助者4 7(2 + 4 + 7)0 => 4
答案 3 :(得分:2)
它就像斐波那契序列,但对于3个数字,而不是2:
F'_n = F'_{n-1} + F'_{n-2} + F'_{n-3}
斐波纳契序列
F_n = F_{n-1} + F_{n-2}