PHP 递归函数
遞歸函數(shù)即自調(diào)用函數(shù),在函數(shù)體內(nèi)部直接或間接的自己調(diào)用自己,即函數(shù)的嵌套調(diào)用就是函數(shù)本身。通常
在此類型的函數(shù)體中會附加一個條件判斷,以判斷是否需要執(zhí)行遞歸調(diào)用,并且在特定的條件下終止函數(shù)的遞歸
調(diào)用動作,把目前流程的主控權(quán)交回到上一層函數(shù)執(zhí)行。
總結(jié):1.遞歸是一種函數(shù)調(diào)用自身的機制2.遞歸必須要有邊界條件,也就是遞歸出口(退出遞歸)3.遞歸前進段和遞歸返回段,也就是最后得到的值4.當邊界條件(遞歸出口)不滿足的時候,遞歸前進;當邊界條件(遞歸出口)滿足時,遞歸返回下面我們看一個簡單的遞歸示例: <?php // 聲明一個函數(shù) 用于遞歸測試 function test($n) {echo $n . " "; //在函數(shù)開始輸出參數(shù)的值if($n > 0) { //判斷參數(shù)是否大于0test($n - 1); //如果參數(shù)大于0則調(diào)用自己,并將參數(shù)減1后再次傳入}else{ //判斷參數(shù)不大于0echo "<------>";}echo $n . " "; }test(10);--------------------------------------輸出結(jié)果:10 9 8 7 6 5 4 3 2 1 0 <------>0 1 2 3 4 5 6 7 8 9 10下面我們一步一步解釋一下:
第 1 步:執(zhí)行 test(10),echo 10,因為 10 > 0,執(zhí)行 test(9),后面還有沒來得及執(zhí)行的 echo 10第 2 步:執(zhí)行 test(9),echo 9,因為 9 > 0,執(zhí)行 test(8),后面還有沒來及執(zhí)行的 echo 9第 3 步:執(zhí)行 test(8),echo 8,因為 8 > 0,執(zhí)行 test(7),后面還有沒來得及執(zhí)行的 echo 8第 4 步: 執(zhí)行 test(7),echo 7,因為 7 > 0,執(zhí)行 test(6),后面還有沒來得及執(zhí)行的 echo 7第 5 步:執(zhí)行 test(6),echo 6,因為 6 > 0,執(zhí)行 test(5),后面還有沒來得及執(zhí)行的 echo 6第 6 步:執(zhí)行 test(5),echo 5,因為 5 > 0,執(zhí)行 test(4),后面還有沒來得及執(zhí)行的 echo 5第 7 步 :執(zhí)行 test(4),echo 4,因為 4 > 0,執(zhí)行 test(3),后面還有沒來得及執(zhí)行的 echo 4第 8 步 :執(zhí)行 test(3),echo 3,因為 3 > 0,執(zhí)行 test(3),后面還有沒來得及執(zhí)行的 echo 3第 9 步 :執(zhí)行 test(2),echo 3,因為 2 > 0,執(zhí)行 test(1),后面還有沒來得及執(zhí)行的 echo 2第 10 步 :執(zhí)行 test(1),echo 1,因為 1 > 0,執(zhí)行 test(0),此時 0 > 0 不成立不再執(zhí)行 test() 函數(shù),而是echo “<------>”,并且執(zhí)行后面的 echo 0,此時函數(shù)不再調(diào)用自己,開始將流程的主控權(quán)交回給上一層函數(shù)執(zhí)行,
也就是開始執(zhí)行剛剛 test() 函數(shù)沒來得及輸出的最后一個 echo,整個流程如下圖所示:
在函數(shù)執(zhí)行的第 1 到第 10 步,函數(shù)輸出的是綠色部分,紅色部分還沒來得及輸出就執(zhí)行調(diào)用自己的操作,以此
類推,直到流程執(zhí)行到不滿足調(diào)用自己的條件,輸出 “<------>”,流程開始執(zhí)行前面沒來得及輸出的部分
這就像我們玩游戲一樣,打死一個怪物掉下一件寶物,但是此時還有其他怪物在等著被消滅,我們不得不消滅完
所有怪物之后在回來一個一個撿寶物
但是,可能又會有人問為什么在流程執(zhí)行到不滿足調(diào)用自己的條件后下一個輸出的是 1,而不是 10呢?,如下示例:
<?php function one($num) {echo $num;two($num - 1);echo $num; }function two($num) {echo $num;three($num - 1);echo $num; }function three($num) {echo $num }one(3);-----------------------------輸出結(jié)果:32123執(zhí)行 one(3) 函數(shù),echo 3,然后調(diào)用 two(2) 函數(shù),注意此時還沒 echo 3
執(zhí)行 two(2),echo 2,然后調(diào)用 three(1) 函數(shù),同樣還沒 echo 2
執(zhí)行 three(1) ,echo 1,不再調(diào)用其他函數(shù)
three() 函數(shù)執(zhí)行結(jié)束 echo 2,則 two() 函數(shù)也執(zhí)行結(jié)束,echo 3,所以,最后的輸出結(jié)果就是 3,2,1,2,3
總結(jié)
- 上一篇: 织梦php 文章采集规则,如何正确写De
- 下一篇: django和php学哪个好,哪个更适合