斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
下面介绍PHP的三种实现方式:
递归
这种方式最简洁,但效率最低,内存消耗高,递归太多容易造成栈溢出。
function fib1($n)
{
if ($n == 0) return 0;
if ($n == 1) return 1;
return fib1($n - 1) + fib1($n - 2);
}
尾递归
比上面的递归效率高(接近下面的循环迭代),理论上尾递归依然有栈溢出的问题,但实际中编译器会做“尾递归优化”,大大降低栈溢出的风险
function fib2($a = 0, $b = 1, $n)
{
if ($n == 0) return 0;
if ($n == 1) return $b;
return fib2($b, $a + $b, $n - 1);
}
循环迭代
这种方式效率最高
function fib3($n)
{
$a = 0;
$b = 1;
for ($i = 0; $i < $n; $i++)
{
$temp = $a;
$a = $b;
$b = $a + $temp;
}
return $a;
}