Manual cache

sub fib_cache { state @fib_cache; my ($n) = @_; if ($n < @fib_cache) { return $fib_cache[$n]; } if ($n > 1) { $fib_cache[$n] = fib_cache($n - 1) + fib_cache($n - 2); } else { if ($n) { fib_cache(0); } $fib_cache[$n] = $n; } return $fib_cache[$n]; }