我一直在努力了解这个功能是如何工作的。对于第 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)
谢谢你的时间
我一直在努力了解这个功能是如何工作的。对于第 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)
谢谢你的时间
也许您缺少的部分是
f' = helper 0 0 1
是一样的
f' x = helper 0 0 1 x
否则,请参阅戴夫的回答。
这是一个相当简单的递归函数。当使用三个元素(我猜是序列的种子)和一些术语调用时,它会调用自身,将种子循环左一并添加新术语 (a+b+c)。当“剩余步数”计数器达到 0 时,边缘情况启动并返回当前序列值。这个值被传回所有的函数调用,给出最终的输出。
该f'
函数为该函数提供了一个简单的包装器helper
(它完成了我上面描述的工作),提供了一个标准种子并将请求的术语作为第四个参数传递(MathematicalOrchid 很好地解释了这一点)。
说它叫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 个:
F'_n = F'_{n-1} + F'_{n-2} + F'_{n-3}
其中斐波那契数列是
F_n = F_{n-1} + F_{n-2}