use Memoize;
memoize('fib2');

print "Memoization is fun!\n";

sub fib1 {
    print "Called fib1($_[0])\n";
    my $n = $_[0];
    if ($n <= 0) {
            return 0;
    }
    elsif ($n == 1) {
            return 1;
    }
    else {
            return fib1($n-1) + fib1($n-2);
    }
}
print fib1(5), "\n";

sub fib2 {
    print "Called fib2($_[0])\n";
    my $n = $_[0];
    if ($n <= 0) {
            return 0;
    }
    elsif ($n == 1) {
            return 1;
    }
    else {
            return fib2($n-1) + fib2($n-2);
    }
}
print fib2(30), "\n";