3.4. Memoization[TODO]

给函数增加缓存的代码并不麻烦。如您所见,对任何函数的修改方式几乎都是相同的。那么,为何不让计算机自己来做呢?只需要告诉Perl,要在某个函数上启用缓存就行了。Perl应该可以自动进行所需的变换。对函数进行自动变换以添加缓存,称为memoization,我们说函数被memoized了。 [8]

我写的标准Memoize模块可以完成这仙宫工作。有了Memoize模块,就完全不必重写fib函数了。只需在程序开头加上这样两行即可:

use Memoize;
memoize 'fib';
# 计算给定的第n月中兔子的对数
sub fib {
  my ($month) = @_;
  if ($month < 2) { 1 }
  else {
    fib($month-1) + fib($month-2);
  }
}
			

这样fib就带有缓存功能了。代码本身和原始函数一模一样,但速度要快得多。



[8] memoization这个词是由Donald Michie在1968年创造的。