php遞迴演算法

2022-05-14 04:57:38 字數 3020 閱讀 7331

我們都知道,程式設計有兩大難點:指標和遞迴。這裡說一說遞迴。

一、什麼是遞迴函式呢?

遞迴函式就是直接或間接的自己呼叫自己的函式。一句話就是:「自己呼叫自己」。

二、什麼時候使用遞迴呢?

當需要不斷重複某一方法時,也就是有某種共同的規律,有如「以此類推」,「重複多次」等情景時。 巧用遞演算法能減少大量**。

三、簡單理解遞迴。

可以這樣簡單的理解遞迴:a讓朋友b**一本書,b沒空,託其朋友c**,c讓逛街的d順路帶來,最後,書到了a手裡。梳理一下,

開始是:a -> b -> c -> d ,到d就停止了,

返回是:d -> c -> b -> a。

遞迴必須要有乙個明確的出口,像這裡d買到書就是出口,如果沒有出口,將陷入無限迴圈。下面舉幾個實際的遞迴例子:

1、斐波那契數列

斐波那契數列

又稱**分割

數列、因

數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「

兔子數列

」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、......;表示式:f(n) = f(n + 1) + f(n - 1)( f(0)=0,f(1)=1 )

問題:求f(10)的值。

一、非遞迴解法:

function 

f($n)

return

$sum;

}

echo f(10);//55

二、遞迴解法:

function 

f($n)

return

f($n

-1) +

f($n

-2);

}

echo f(10);//55
當$n的值為3時,

f(3) = f(2) + f(1) = 2;

f(4) = f(3) + f(2) = 2 + 1 = 3;

f(10) = f(9) + f(8)

這樣找到出口後,值一層一層的網上傳遞,直到得到結果。 

遞迴的兩個關鍵是:出口和迴圈體。 

2、無限極分類

一、無限極分類迴圈實現:

$tree 

= array();

$datas

= array(

array('id'

=>

1,'name'

=>

'褲子','pid'

=>

0),array('id'

=>

2,'name'

=>

'帽子','pid'

=>

0),array('id'

=>

3,'name'

=>

'短褲','pid'

=>

1),array('id'

=>

4,'name'

=>

'長褲','pid'

=>

1),array('id'

=>

5,'name'

=>

'紅帽','pid'

=>

2),array('id'

=>

6,'name'

=>

'禮帽','pid'

=>

2),array('id'

=>

7,'name'

=>

'黑色短褲','pid'

=>

3),array('id'

=>

8,'name'

=>

'白色短褲','pid'

=>

3),);

//將id作為鍵值

foreach($datas

as $data)

foreach($tree

as $k

=>

$v)}

}//刪除多餘節點

foreach($tree

as $k

=>

$v)}

輸出:

array

( [1] => array

([id] => 1

[name] => 褲子

[pid] => 0

[children] => array

([0] => array

([id] => 3

[name] => 短褲

[pid] => 1

[children] => array

([0] => array

([id] => 7

[name] => 黑色短褲

[pid] => 3

)[1] => array

([id] => 8

[name] => 白色短褲

[pid] => 3))

)[1] => array

([id] => 4

[name] => 長褲

[pid] => 1))

)[2] => array

([id] => 2

[name] => 帽子

[pid] => 0

[children] => array

([0] => array

([id] => 5

[name] => 紅帽

[pid] => 2

)[1] => array

([id] => 6

[name] => 禮帽

[pid] => 2))

))

遞迴實現:

$tree

= $datas

;

function 

get_tree($data,$pid)

$tree

= $value;}}

return

$tree;

}print_r(get_tree($tree,0));die;

PHP演算法 遞迴演算法

遞迴函式在日常專案中有很廣泛的用途,例如寫樹結構 遍歷目錄等,今天我們用乙個簡單的遞迴demo來求斐波那契數列,並用 釋它執行的過程。0 1 1 2 3 5 8 13 21 34 function demo n elseif n 1 else return number echo demo 4 輸出...

PHP遞迴演算法

在php開發過程中,遞迴演算法通常用於無限極分類。遞迴演算法的實現方法是有多種的,如通過 靜態變數 全域性變數 引用傳參 的方式。1.靜態變數的方法 靜態變數只存在於函式作用域內,一般的函式內變數在函式結束後會釋放,比如區域性變數,但是靜態變數卻不會。就是說,下次再呼叫這個函式的時候,該變數的值會保...

php遞迴演算法總結

遞迴演算法的實現方法是有多種的,如通過 靜態變數 全域性變數 引用傳參 的方式 靜態變數的方法 function call call 輸出 0 1 2 3 4 5 6 7 8 9 利用static定義靜態變數來實現遞迴排序。如上我們定義了乙個call方法和靜態變數 i,如果我們不給 i變數新增判斷,...