java基礎:遞迴應用---遍歷檔案目錄

十五樓亮哥發表於2015-02-02

一:遞迴相關知識

程式呼叫自身的程式設計技巧稱為遞迴( recursion)。 
一個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞迴的能力在於用有限的語句來定義物件的無限集合。用遞迴思想寫出的程式往往十分簡潔易懂。 
一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。 
注意: 
(1) 遞迴就是在過程或函式裡呼叫自身; 
(2) 在使用遞增歸策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。

遞迴演算法一般用於解決三類問題:
(1)資料的定義是按遞迴定義的。(Fibonacci函式)
(2)問題解法按遞迴演算法實現。(回溯)
(3)資料的結構形式是按遞迴定義的。(樹的遍歷,圖的搜尋)

遞迴的缺點:
遞迴演算法解題的執行效率較低。在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。


二:遍歷檔案目錄

/**
 * 遍歷目錄下所有檔案
 * @author 劉彥亮
 * @version 1.0
 */
public class FileList1 {
	public static void main(String[] args) {
		File f = new File("D:/video");
		tree(f);
	}

	public static void tree(File f) {
		//獲取目錄下所有子檔案
		File[] childFiles = f.listFiles();
		//遍歷子檔案
		for (int i = 0; i < childFiles.length; i++) {
			//列印檔名
			System.out.println(childFiles[i].getName());
			//如果子檔案還是一個檔案目錄的話,呼叫自身
			if (childFiles[i].isDirectory()) {
				tree(childFiles[i]);
			}

		}

	}

}
輸出結果:

但是這樣不能看出檔案目錄的結構,繼續完善一下程式碼:

public class FileList2 {
	public static void main(String[] args) {
		File f = new File("D:/video");
		System.out.println(f.getName());
		tree(f, 1);
	}

	public static void tree(File f, int index) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < index; i++) {
			sb.append("    ");

		}
		// 獲取目錄下所有子檔案
		File[] childFiles = f.listFiles();
		// 遍歷子檔案
		for (int i = 0; i < childFiles.length; i++) {
			// 列印檔名
			System.out.println(sb.toString() + childFiles[i].getName());
			// 如果子檔案還是一個檔案目錄的話,呼叫自身
			if (childFiles[i].isDirectory()) {
				tree(childFiles[i], index++);
			}

		}

	}

}

輸出結果:




相關文章