3.4 记忆术
给函数添加缓存技术代码不是非常困难的。且已经看到,需要的改变对任何函数几乎一样。那么,为什么不让计算机做这些呢?若告诉Perl想要使一个函数具有缓存行为。Perl应该能自动地执行所需的转换。这样的给函数添加缓存行为的自动的转换就称为记忆术(memoization),函数则称为带记忆的(memoized)。
标准的Memoize模块就是做这个的。如果Memoize模块可用,就完全不必重写fib代码。可以简单地在程序的顶部添加两行:
### Code Library: fib-automemo
use Memoize;
memoize 'fib';
# Compute the number of pairs of rabbits alive in month n
sub fib {
my ($month) = @_;
if ($month < 2) { return $month }
fib($month-2) + fib($month-1);
}
fib现在展现了缓存行为。代码和原先的慢版完全一样,但是函数不再慢了。
相关资源:高阶PERL应用技术