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
う〜ん、爽快!!