#!/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)