通用代码确实减慢了斐波纳契,而特定的代码很快?

时间:2015-01-30 11:26:40

标签: performance haskell recursion fibonacci

这个用于计算第40个斐波纳契数的代码似乎就此挂起了。它似乎是以慢递归的方式计算它。

fibs :: (Num a, Enum a) => [a]
fibs = 0 : zipWith (+) fibs (1 : fibs)

main = do
    print (fibs !! 40 :: Integer)

另一方面,如果我将纤维的类型改为

fibs :: [Integer]

然后立即计算它。

为什么更改类型以使其更具体有效地更改用于计算它的算法?这是GHC中的一个错误,还是有一些基本的东西?

0 个答案:

没有答案