簡單的理解就是,函數裏面直接或者間接的調用函數自己.php
1.函數累不調用自己
2.須要有明確的結束條件,否則容易形成死循環.
3.遞歸函數的代碼當然簡潔,可是執行效率較低,須要結合本身的需求制定相應的算法,不推薦使用遞歸.
4.遞歸函數的執行順序依次是從外部執行到最裏層,當知足限制條件的時候,依次從內部執行到最外層.算法
使用遞歸函數和棧逆序一個棧(只能使用棧一種數據結構)數據結構
1.獲取一個棧的棧底元素刪除而且返回最底層元素.
2.利用1種的遞歸函數,逆序這個棧函數
/** * 獲取而且刪除棧的最後一個元素 */ function getAndRemoveLastElement (&$stack) { // 彈出最外層的元素. $element = array_pop($stack); if (!empty($stack)) { $last = getAndRemoveLastElement($stack); array_push($stack,$element); return $last; } else { // 遞歸的結束條件,棧爲空. return $element; } }
/** * 逆序這個棧. * @param $stack */ function reverse (&$stack) { // 遞歸退出的限制條件. if (!empty($stack)) { $i = getAndRemoveLastElement($stack);// 未符合如今條件時,依次從外到裏面執行. reverse($stack); // 符合限制條件後依次從裏到外向下執行. array_push($stack,$i); } else { // 爲空就返回. return ; } }
<?php $stack = array(1,2,3,4,5); reverse($stack); var_dump($stack);
輸出爲code
array(5) { [0]=> int(5) [1]=> int(4) [2]=> int(3) [3]=> int(2) [4]=> int(1) }