如果你是一名 ruby 程序员,那么你可能会遇到哈希块记忆模式。举一个简单的例子,我向您展示斐波那契数列的记忆版本:
fib_hash = Hash.new do |h,i|
h[i] = h[i-1] + h[i-2]
end
# establish the base cases
fib_hash[1] = 1; fib_hash[2] = 1
当然,这不是创建斐波那契数列的记忆版本的唯一方法。您还可以执行以下操作:
@cache = {}; @cache[1] = 1; @cache[2] = 1
def memo_fib(n)
@cache[n] ||= (memo_fib(n-1) + memo_fib(n-2))
end
希望您看到哈希块记忆模式如何映射到在许多其他语言中更为常见的第二个版本。我想知道的是这两个版本之间是否有任何区别?我无法摆脱散列块版本更有效的感觉,但我无法真正证明原因。