<?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;
在数据量比较大的情况下尾递归的效率就超级高啦
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.