3. Memoization

何回もコールされるような関数はメモ化するに限る。でも、副作用のない状態にしておかないと当然ダメ。

#!/usr/bin/env perl

use strict;
use warnings;

use Memoize;
memoize 'fib';

sub fib {
    my ($n) = @_;

    if ($n == 0 || $n == 1) {
	return 1;
    } else {
	return fib($n-1) + fib($n-2);
    }
}

print fib($ARGV[0]) . "\n";

実行結果

[tomopple]~/Program/perl $ time ./fib_memo.pl 35
14930352

real	0m0.025s
user	0m0.017s
sys	0m0.008s

う〜ん、爽快!!