Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<?php
$t = microtime(1);
function fib ($n)
{
if ($n < 3) return 1;
return fib($n - 1) + fib($n - 2);
}
echo fib(30) . "\n";
echo microtime(1) - $t;
По результатам исследования сделаны следующие выводы, некоторые из которых оказались несколько неожиданными:
- Скорость работы программ на ассемблере может быть более 50% медленнее, чем программ на си/си++, скомпилированных с максимальной оптимизаций;
Однако, расчет этой функции требует значительного числа рекурсивных вызовов и большинство тестируемых языков оказалось не в состоянии их поддерживать для вычислений, имеющих заметную длительность. Известно, что вычисление этой функции нельзя свести к итерацииИзвестно? А как быть с теоремой об удалении рекурсии?
fib :: Integer -> Integer -> Int -> Int -> Integer
fib cur prev n ref
| n == ref = cur
| otherwise = fib (cur + prev) cur (n+1) ref
fib' :: Int -> Integer
fib' = fib 1 1 2
main = interact $ unlines . map (show . fib'. read) .lines
fib 15
fib(32)
int k = 41;
System.out.println(fibc(40));
Скорость работы программ на ассемблере может быть более 50% медленнее, чем программ на си/си++, скомпилированных с максимальной оптимизаций
use Memoize;
sub fib {
my $n = shift;
if ($n < 3) {return 1;}
return fib($n-1) + fib($n-2);
}
memoize('fib');
print fib(33), "\n"
$ time perl fib.pl
3524578
real 0m3.437s
user 0m3.427s
sys 0m0.008s
$ time perl fib-memo.pl
3524578
real 0m0.028s
user 0m0.020s
sys 0m0.008s
Большое обзорное тестирование языков программирования