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