А почему так строго
(n < 2) , ведь Fib(2) = 1 и этим тоже можно пользоваться.
Во всяком случае, в том учебнике математики, что я учился в школе, опередение было именно такое: два первых равны 1, а каждый следующий сумме двух предыдущих. (Не цитата, потому как за ходом лет, учебник был утерян)
Вопрос не принципиальный, для данного примера.
time perl fib.pl
real 0m4.364s
user 0m2.870s
sys 0m0.010s
с кодом
fib.pl
#!/usr/bin/perl -w
use strict;
sub fib
{
return 1 if $_[0] < 3;
return fib($_[0]-1) + fib($_[0]-2);
}
$_=fib(28);
Заменил вывод на экран значения присвоением, чтобы добиться большей точности замера времени.
time python fib.py
real 0m1.288s
user 0m1.250s
sys 0m0.040s
И сорц к нему
fib.py
def fib(n):
if n<3:
return 1
return fib(n-1) + fib(n-2)
a=fib(28)
Исполнялось на удаленном институтском шелле неизвесной конфигурации. Параметр поставил в 28, потому как больше Perl-овскую программу пинали за CPU exceed limit. Python c первой попытки напечатал мне значение 30 и никем обижен не был.