4

我一直在努力了解这个功能是如何工作的。对于第 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)

谢谢你的时间

4

4 回答 4

7

也许您缺少的部分是

f' = helper 0 0 1

是一样的

f' x = helper 0 0 1 x

否则,请参阅戴夫的回答。

于 2013-05-19T09:23:59.310 回答
5

这是一个相当简单的递归函数。当使用三个元素(我猜是序列的种子)和一些术语调用时,它会调用自身,将种子循环左一并添加新术语 (a+b+c)。当“剩余步数”计数器达到 0 时,边缘情况启动并返回当前序列值。这个值被传回所有的函数调用,给出最终的输出。

f'函数为该函数提供了一个简单的包装器helper(它完成了我上面描述的工作),提供了一个标准种子并将请求的术语作为第四个参数传递(MathematicalOrchid 很好地解释了这一点)。

于 2013-05-19T09:23:11.837 回答
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

于 2013-05-19T09:39:28.247 回答
2

它就像一个斐波那契数列,但是对于 3 个数字,而不是 2 个:

F'_n = F'_{n-1} + F'_{n-2} + F'_{n-3}

其中斐波那契数列是

F_n = F_{n-1} + F_{n-2}
于 2013-05-19T14:51:13.360 回答