php遞迴函式及簡單例項講解
阿新 • • 發佈:2018-12-19
遞迴函式即自呼叫函式,在函式體內部直接或者間接的自己呼叫自己,即函式的巢狀呼叫是函式本身。通常在此型別的函式提之中會附加一個條件判斷敘述,以判斷是否需要執行遞迴呼叫,並且在特定的條件下終止函式的遞迴呼叫動作,把目前流程的主控權交回到上一層函式來執行。以此,當某個執行遞迴呼叫的函式沒有附加條件判斷敘述時,可能會造成無限迴圈的錯誤情形。
函式遞迴呼叫最大的好處在於可以精簡程式中的複雜重複呼叫程式,並且能以這種特性來執行一些較為複雜的運算動作。例如,列表、動態樹形選單及遍歷目錄等操作。相應的非遞迴函式雖然效率高,但卻比較難程式設計,而且相對來說可讀性差。現代程式設計的目標主要是可讀性好。隨著計算機硬體效能的不斷提高,程式在更多的場合優先考慮可讀而不是高效,所以,鼓勵用遞迴函式實現程式思想。
一個簡單的遞迴呼叫例項如下所示:
<?php
//宣告一個函式,用於測試遞迴
function test($n){
echo $n." "; //在函式開始輸出引數的值
if($n>0){ //判斷引數是否大於0
test($n-1); //如果引數大於0則呼叫自己,並將引數減1後再次傳入
}else{ //判斷引數是不大於0
echo "<--------> ";
}
echo $n." " ;
}
test(10); //呼叫test函式將整數10傳給引數
?>
該程式執行後輸出如下的結果:
10 9 8 7 6 5 4 3 2 1 0 <--------> 0 1 2 3 4 5 6 7 8 9 10
說明:在上面的例項中聲明瞭一個 test()函式,該函式需要一個整型的引數。在函式外面通過傳遞整數 10 作為引數呼叫 test()函式。在 test()函式體中,第一條程式碼輸出引數的值和一個空格。然後判斷條件是否成立,成立則呼叫自己並將引數減 1 再次傳入。開始呼叫時,它是外層調內層,內層調更內一層,直到最內層由於條件不允許必須結束。最記憶體結束了,輸出 <--------> 作為分界符,執行呼叫之後的程式碼輸出引數的值和空格,它就會回到稍外一層繼續執行。稍外一層在結束時,退回到在稍外一層繼續執行,層層推出,直到最外層結束。執行完成以後的結果就是我們上面看到的結果。