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

来源:http://www.cnblogs.com/qingfj/archive/2016/08/05/5742893.html
-Advertisement-
Play Games

函數的遞歸調用 遞歸的含義 遞歸其實也只是一種演算法上的描述,不是一種新的語法! 有時候,我們解決問題的時候,會遇到這種情況,當我們把一個大的問題按照某種解決方案分成若幹個小的問題的時候,發現這些小問題的解決方案其實和剛纔大問題的解決方案又是一樣的! 典型的,比如:求階乘! 10! = 10 * 9! ...


函數的遞歸調用

遞歸的含義

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

 

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

 

典型的,比如:求階乘!

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');

效果:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、SpringMVC 使用 ModelAndView 來處理返回值問題。 1.ModelAndView 官方描述: Holder for both Model and View in the web MVC framework.Note that these are entirely distin ...
  • 1. VirtualBox的安裝 參考常規安裝方式即可。 VirtualBox 4.3.14 for Windows hosts:http://download.virtualbox.org/virtualbox/4.3.14/VirtualBox-4.3.14-95030-Win.exe 2. U ...
  • 在windows2008伺服器上安裝wampserver3.0.4集成環境,預設卻是無法遠程訪問,如果要遠程訪問需要修改apache的配置文件httpd.conf,修改如下: <Directory "D:/wamp64/www/"> # # Possible values for the Optio ...
  • 註釋規範 1、 類註釋 在每個類前面必須加上類註釋,註釋模板如下: 2、 屬性註釋 在每個屬性前面必須加上屬性註釋,註釋模板如下: 3、 方法註釋 在每個方法前面必須加上方法註釋,註釋模板如下: 4、 構造方法註釋 在每個構造方法前面必須加上註釋,註釋模板如下: 5、 方法內部註釋 在方法內部使用單 ...
  • 函數指針、回調函數、系統調用區別1.函數指針 2.回調函數 體現: 1.函數名作為參數傳遞給調用函數。 2.將調用者和被調函數分開,回調函數實現具體的功能,調用者無需關註實現的具體細節。3.系統調用系統調用 --> (0x80)軟中斷(系統調用表) --> 內核函數 --> 返回到系統調用層 rea ...
  • 用遞歸的方法實現無限極分類 通常我在寫項目的時候,在寫一些例如商城分類的時候會實現對應分類的上級分類,或者其它項目部門管理的上級部門的時候一般就會用到無限極分類來進行分類 第一步:首先在數據表設計的時候,如果要實現無限極分類,一般我會在數據表多添加一個欄位pid,下麵我通過一張新建的數據表來說明一下 ...
  • php程式是部署在IIS7上面,ajax提交數據時,遇到了兩個問題,一個就是跨域,一個php程式總會被執行兩次。 第一個問題的解決方法,是百度出來的,添加下麵幾行代碼就可以了: header('Access-Control-Allow-Origin:*'); header("Access-Contr ...
  • 虛擬記憶體按頁劃分,我們可以明確告訴系統:某一個虛擬記憶體頁需要和實際記憶體幀相關聯。這樣一來,該記憶體頁就被換進來了,而且不會被系統換出去。這一行為叫做鎖頁(locking a page)。 一般來講頁的換進換出是透明的,一般程式接觸不到這一層。但是呢,鎖頁可以為我們帶來如下好處: 1、速度:如果你的程式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...