首页 > 解决方案 > 斐波那契无限列表性能(高阶函数与标准递归)

问题描述

在学习在 Haskell 中创建无限列表时,我发现了以下使用高阶函数(zipWith)的斐波那契实现

fibs :: [Integer]
fibs = 1:1:(zipWith (+) fibs (tail fibs))

看起来很聪明,但对于初学者来说也太抽象了。

所以,我决定创建这样结束的斐波那契递归解决方案:

fib :: (Num a, Ord a) => a -> a
fib n
  | (n == 0) = 1
  | (n == 1) = 1
  | (n > 1) = fib (n - 1) + fib (n - 2)

fib' :: (Num t, Ord t) => t -> [t]
fib' n = (fib n):(fib' (n+1))

fiblst :: [Integer]
fiblst = fib' 0

两者都有效,但我发现在我的实现中性能非常糟糕,而原始 ( fibs) 函数以光速运行并继续打印整个屏幕,而我的 ( fiblst) 在另一侧几乎没有进入第三行并继续占用 CPU .

关于为什么我的实施与其他实施相比如此缓慢的任何提示?

谢谢

标签: haskelllist-comprehensionfibonaccihigher-order-functionsinfinite

解决方案


推荐阅读