PHP遞迴演算法的執行個體程式

來源:互聯網
上載者:User


遞迴函式為自調用函數,在函數體內直接或間接自己調用自己,但需要設定自調用的條件,若滿足條件,則調用函數本身,若不滿足則終止本函數的自調用,然後把目前流程的主控權交回給上一層函數來執行,可能這樣給大家講解,還是很難明白,直接上例子

function test ($n){
echo $n.”  “;
if($n>0){
test($n-1);
}else{
echo “<–>”;
}
echo $n.”  ”
}
test(2)

這個例子最終的輸出結果是2 1 0<–>0 1 2

我解釋下  為何輸出是這樣的

第一步,執行test(2),echo 2,然後因為2>0,執行test(1), 後面還有沒來得及執行的echo 2
第二步,執行test(1),echo 1,然後因為1>0,執行test(0),同樣後面還有沒來得及執行的 echo 1
第三步,執行test(0),echo 0,執行test(0),echo 0,  此時0>0的條件不滿足,不在執行test()函數,而是echo “<–>”,並且執行後面的 echo 0

此時函數已經不再調用自己,開始將流程的主控權交回給上一層函數來執行,也就是開始執行剛剛所有test()函數沒來得及輸出的最後一個echo,0的一層是1也就是輸出1  1的上一層是2 也就是輸出2    2沒有山一層  所以呢   輸出的內容就是2 1 0<–>0 1 2

例子

,我們要遍曆一個檔案夾裡面的所有目錄,列出裡面所有的檔案,PHP本身內建的有一個readdir的函數,不過只能讀取當前的目錄,根據這個函數,我寫了另外一個函數,用來實現我的需求。函數的原理很簡單,主要就是用了一下遞迴調用。

function file_list($path){
    if ($handle = opendir($path)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if (is_dir($path."/".$file)) {
                    echo $path.": ".$file."<br>";//去掉此行顯示的是所有的非目錄檔案
                    file_list($path."/".$file);
                } else {
                    echo $path.": ".$file."<br>";
                }
            }
        }
    }
}

例子

遞迴的應用

中序遍曆二叉樹

void inorder (BinTree T){  
if (T){  
inorder(T->lchild);  
printf(“%c”,T->data);  
inorder(T->rchild);  
}  
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.