my %cache; sub fib { my $n = shift; return $n if $n < 2; return ( $cache{ $n - 1 } ||= fib($n - 1) ) + ( $cache{ $n - 2 } ||= fib($n - 2) ); }