这个Haskell函数是如何工作的?

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)

感谢您的时间。

1
在ghci中键入helper的定义并使用:t helper获取其类型,这将给你一个提示。 - Alexandre C.
4个回答

7
也许你缺少的部分是这样的:
f' = helper 0 0 1

是同一件事。
f' x = helper 0 0 1 x

否则,请查看戴夫的答案。

5
这是一个相当简单的递归函数。当使用三个元素(我猜这是用于序列的种子)和一定数量的项数进行调用时,它会再次调用自身,将种子循环左移一位并添加新的项(a+b+c)。当“剩余步骤数”的计数器达到0时,边缘情况就会出现并返回当前序列值。这个值被传回所有函数调用中,给出最终输出。
“f'”函数提供了一个简单的包装器,在“helper”函数周围提供标准种子,并将请求的术语作为第四个参数传递(MathematicalOrchid很好地解释了这一点)。

4

假设它被称为f' 5

下面是它执行的顺序:

迭代1:helper 0 0 1 5

迭代2:helper 0 1 (0+0+1) 4

迭代3:helper 1 1 (0+1+1) 3

迭代4:helper 1 2 (1+1+2) 2

迭代5:helper 2 4 (1+2+4) 1

迭代6:helper 4 7 (2+4+7) 0 => 4


2

这就像斐波那契数列,但是针对的是三个数字而不是两个:

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

斐波那契数列是什么

F_n = F_{n-1} + F_{n-2}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接