#!/usr/bin/env perl
use strict;
use warnings;
use Time::HiRes qw( gettimeofday tv_interval );
for my $i (1 .. 100) {
my $start = [gettimeofday];
my $fibonacci_number = fibo($i);
my $interval = tv_interval( $start, [gettimeofday]);
print "fib($i)=$fibonacci_number ($interval sec)\n";
}
sub fibo {
my $num = shift;
return 1 if $num<3;
return fibo($num-1) + fibo($num-2);
}
####
$ perl fibo.pl
fib(1)=1 (6e-06 sec)
fib(2)=1 (4e-06 sec)
fib(3)=2 (7e-06 sec)
fib(4)=3 (6e-06 sec)
fib(5)=5 (6e-06 sec)
fib(6)=8 (1e-05 sec)
fib(7)=13 (1.6e-05 sec)
fib(8)=21 (2.4e-05 sec)
fib(9)=34 (3.5e-05 sec)
fib(10)=55 (5.6e-05 sec)
fib(11)=89 (8.9e-05 sec)
fib(12)=144 (0.000145 sec)
fib(13)=233 (0.000291 sec)
fib(14)=377 (0.000379 sec)
fib(15)=610 (0.000609 sec)
fib(16)=987 (0.000981 sec)
fib(17)=1597 (0.001583 sec)
fib(18)=2584 (0.002644 sec)
fib(19)=4181 (0.00414 sec)
fib(20)=6765 (0.005748 sec)
fib(21)=10946 (0.004466 sec)
fib(22)=17711 (0.007214 sec)
fib(23)=28657 (0.011702 sec)
fib(24)=46368 (0.018114 sec)
fib(25)=75025 (0.027751 sec)
fib(26)=121393 (0.045355 sec)
fib(27)=196418 (0.072849 sec)
fib(28)=317811 (0.117512 sec)
fib(29)=514229 (0.193195 sec)
fib(30)=832040 (0.307089 sec)
fib(31)=1346269 (0.505429 sec)
fib(32)=2178309 (0.796903 sec)
fib(33)=3524578 (1.312573 sec)
fib(34)=5702887 (2.093858 sec)
fib(35)=9227465 (3.422112 sec)
fib(36)=14930352 (5.594139 sec)
fib(37)=24157817 (8.969398 sec)
fib(38)=39088169 (14.46981 sec)
fib(39)=63245986 (23.423682 sec)
fib(40)=102334155 (38.201329 sec)
fib(41)=165580141 (62.30559 sec)
^C
####
use Memoize;
memoize('fibo');
####
$ perl fibo.pl
fib(1)=1 (8e-06 sec)
fib(2)=1 (5e-06 sec)
fib(3)=2 (1.2e-05 sec)
fib(4)=3 (7e-06 sec)
fib(5)=5 (6e-06 sec)
fib(6)=8 (6e-06 sec)
fib(7)=13 (6e-06 sec)
fib(8)=21 (6e-06 sec)
fib(9)=34 (5e-06 sec)
fib(10)=55 (6e-06 sec)
. . . . . .
fib(98)=1.35301852344707e+20 (6e-06 sec)
fib(99)=2.18922995834555e+20 (6e-06 sec)
fib(100)=3.54224848179262e+20 (6e-06 sec)