我在 StackOverflow 上找到了两种不同的解决方案来计算斐波那契数。一个使用 a lambda
,如下所示:
f = ->(x){ x < 2 ? x : f[x-1] + f[x-2] }
f[6] # => 8
另一个使用 a Hash
:
f = Hash.new{ |h,k| h[k] = k < 2 ? k : h[k-1] + h[k-2] }
f[6] # => 8
版本比Hash
版本快lambda
。
Benchmark.bm do |x|
x.report { f[35] }
x.report { fibonacci[35] }
end
user system total real
7.332000 0.000000 7.332000 (7.349421)
0.000000 0.000000 0.000000 (0.000000)
该lambda
版本甚至无法f[100]
在合理的时间内Hash
进行计算,而该版本可以fibonacci[1000]
在不到一微秒的时间内进行计算。为什么Hash
版本更快?