在 PHP 中,我們經常會遇到這樣的情況:在面臨一個龐大的問題時,需要把這個龐大的問題拆分成各個細小的單元,解決了每個細小單元的問題,這個龐大的問題便迎刃而解了。遞回與疊代就是這種思想的體現。
PHP 遞回
遞回就是程式呼叫自身、函數不斷參照自身,直到參照的物件已知。構成遞回需滿足以下兩個條件:
-
子問題需與原始問題為同樣的事,且更為簡單。
-
不能無限制地呼叫本身,必須有一個出口,化簡為非遞回狀況處理。
例如,斐波那契數列:1,1,2,3,5,8……
斐波那契數列的特點是第 0 位(在計算機中習慣以 0 開始計數)和第 1 位的數位都是 1,從第 2 位開始,當前數位的值是前兩位數值之和,可以用如下的公式表示:
f(0)=1
f(1)=1
f(n)=f(n-1)+f(n-2){n>1}
用 PHP 實現遞回求斐波那契數列的程式碼如下:
<?php
function readd($n){
if($n>2){
$arr[$n] = readd($n-2) + readd($n-1); // 遞回呼叫自身
return $arr[$n];
} else {
return 1;
}
}
echo readd(30);
?>
readd() 函數封裝了求斐波那契數列的方法,向函數中傳遞不同的數位將會求出對應位置的數列的值。
PHP 疊代
疊代就是利用變數的原值推算出變數的一個新值。下面用一個簡單的例子說明迭代:
<?php
function diedai($n){
for ($i=0,$j=0; $i < $n; $i++) {
$j = $j + $i;
}
return $j;
}
echo diedai(4);
?>