程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 遞歸的一些應用(一)遍歷文件夾,遞歸遍歷文件夾

遞歸的一些應用(一)遍歷文件夾,遞歸遍歷文件夾

編輯:關於PHP編程

遞歸的一些應用(一)遍歷文件夾,遞歸遍歷文件夾


函數的遞歸調用

遞歸的含義

遞歸其實也只是一種算法上的描述,不是一種新的語法!

 

有時候,我們解決問題的時候,會遇到這種情況,當我們把一個大的問題按照某種解決方案分成若干個小的問題的時候,發現這些小問題的解決方案其實和剛才大問題的解決方案又是一樣的!

 

典型的,比如:求階乘!

10! = 10 * 9!

9! =  9 * 8!

8! = 8 * 7!

……

語法上,函數的遞歸調用,就是函數在執行的過程中自己又調用自己!

 

遞歸的兩個要點:

1,  遞歸的出口:就是指什麼時候停止遞歸調用

2,  遞歸點:就是指什麼時候開始使用遞歸調用

 

在寫遞歸調用的時候,先寫遞歸的出口,再寫遞歸點!

 

所以,遞歸調用的特點是:代碼書寫比較簡單,但是執行的時候,比較消耗內存資源!

也可以說,遞歸的本質就是以空間換取時間!

 

下面是通過遞歸遍歷文件夾的一個小案例:

代碼:

 

<?php 
/**
 * 定義遍歷指定路徑下文件與文件夾,通過遞歸的方法
 * @param  $dir string
 */
function dirs($dir,$level=0){
    //列出指定路徑中的文件和目錄
    $files=scandir($dir);

    //遍歷所有的目錄
    foreach($files as $file){

        //重復一個字符串
        echo str_repeat('&nbsp;',$level*4);

        //拼接路徑
        $tmpdir=$dir.'/'.$file;

        //判斷是否是一個目錄,文件夾
        if(is_dir($tmpdir)){
            //讓文件夾變成紅色
            echo "<font style='color:red;'>$tmpdir</font><br/>";
            //目錄下有兩個隱藏文件.和..,排除掉
            if($file !='.' && $file !='..'){
                //通過遞歸的方法,調用自己,進行遍歷
                dirs($tmpdir,$level+1);//遞歸點
            }
        }else{
            //如果不是一個目錄就直接顯示這個文件
            echo $file.'<br/>';
        }

    }
}

dirs('d:/sphinx');

效果:

下篇我會用遞歸的方法來實現無限極分類的小案例。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved