斐波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個(gè)數(shù)列:0、1、1、2、3、5、8、13、21、34、……
下面介紹PHP的三種實(shí)現(xiàn)方式:
遞歸
這種方式最簡(jiǎn)潔,但效率最低,內(nèi)存消耗高,遞歸太多容易造成棧溢出。
function fib1($n)
{
if ($n == 0) return 0;
if ($n == 1) return 1;
return fib1($n - 1) + fib1($n - 2);
}
尾遞歸
比上面的遞歸效率高(接近下面的循環(huán)迭代),理論上尾遞歸依然有棧溢出的問(wèn)題,但實(shí)際中編譯器會(huì)做“尾遞歸優(yōu)化”,大大降低棧溢出的風(fēng)險(xiǎn)
function fib2($a = 0, $b = 1, $n)
{
if ($n == 0) return 0;
if ($n == 1) return $b;
return fib2($b, $a + $b, $n - 1);
}
循環(huán)迭代
這種方式效率最高
function fib3($n)
{
$a = 0;
$b = 1;
for ($i = 0; $i < $n; $i++)
{
$temp = $a;
$a = $b;
$b = $a + $temp;
}
return $a;
}