PHP遞回與疊代

2020-07-16 10:05:11
在 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);
?>