<?php
$time1= microtime();
//普通递归
function fib($n)
{
if ($n < 2) {
return 1;
}
return fib($n - 1) + fib($n - 2);
}
echo fib(30);
echo PHP_EOL;
echo microtime()-$time1;
echo PHP_EOL;
$time2 = microtime();
//缓存 空间换时间
function fib2($n)
{
$tmp = [];
if (isset($tmp[$n]) && $tmp[$n] != 0)
return $tmp[$n];
if ($n < 2) {
$tmp[$n] = 1;
return 1;
} else {
$tmp[$n] = fib2($n - 1) + fib2($n - 2);
return $tmp[$n];
}
}
echo fib2(30);
echo PHP_EOL;
echo microtime()-$time2;
echo PHP_EOL;
$time3 = microtime();
//尾递归
function fib3($a, $b ,$n)
{
if ($n == 0) {
return $a;
} else {
return fib3($a+$b, $a, $n-1);
}
}
echo fib3(1, 0 , 30);
echo PHP_EOL;
echo microtime()-$time3;
在数据量比较大的情况下尾递归的效率就超级高啦