haskell - 斐波那契无限列表性能(高阶函数与标准递归)
问题描述
在学习在 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 .
关于为什么我的实施与其他实施相比如此缓慢的任何提示?
谢谢
解决方案
推荐阅读
- permissions - gitlab ci - 您无权访问该资源
- npm - 将 Angular 库发布到私有 Verdaccio npm 存储库
- c - C 比较速度:等于“==” vs Bitwise 和“&”
- php - 500 错误:使用 file_get_contents() 时,服务器配置中的 https:// 包装器被 allow_url_fopen=0 禁用
- python - 问题:TypeError:float() 参数必须是字符串或数字,而不是“时间戳”
- javascript - 具有交互变量的随机数生成器
- postgresql - 查询以获得低于结果 PostgreSQL
- opengl - VBO 如何连接到 VAO
- c# - 如何禁用附加到 Unity 中随机字符的脚本?
- java - Java:修复日期对象中不正确的时区