【发布时间】:2017-10-15 13:51:56
【问题描述】:
这个函数可以找到第 n 个斐波那契。
a = 1
b = 2
fibonacci :: Int -> Int
fibonacci 1 = a
fibonacci 2 = b
fibonacci n = (fibonacci (n-1)) + (fibonacci (n-2))
但是速度很慢。如果我这样做map fibonacci [1..],随着数字的到来,它真的会变慢。我猜这是由于使用了多少堆栈和计算的绝对数量而导致的开销 - 将每一个都降低到 a 和 b 而不是仅仅将最后两个加在一起。
如何改进它以使其更快,但仍使用函数式编程风格? (我是一个明确的 haskell 和 FP 新手!) 我在 Python 中尝试了一些相比之下闪电般的东西。
提示与工作代码一样受欢迎!
【问题讨论】:
-
来吧。每个 Haskell 程序员都应该知道这个页面:willamette.edu/~fruehr/haskell/evolution.html
-
@EugeneSh。来吧来吧”?这条评论似乎居高临下。
-
@luqui 不是看表情吗?
-
我同意这是居高临下的。特别是加上“every”和“should”,它表示任何不知道这个页面的人一定不是真正的Haskell程序员。但是你不可能生来就知道所有有趣的事情:OP 是today's lucky 10,000 之一,暗示他应该已经知道这一点并不好。
-
哦,伙计.. 鉴于我链接到的那个页面是幽默,而且没有真正的教育意义(嗯,有点),我的说法与说“到理解递归一个人应该理解递归”——这也不是一个很严肃的说法。它被称为“笑话”。
标签: haskell functional-programming fibonacci