讓程式中的方法(function)可自行呼叫方法本身,
這樣的做法可以讓程式內容易讀, 程式內容也會比較簡潔.
在學校常被用來做範列就是階乘,
5! = 5 * 4 * 3 * 2 * 1
公式利用遞迴的概念可以換成:
n! = n * (n-1)!
在撰寫遞迴程式時, 要注意必須給定一個條件使其脫離迴圈,
若沒給定條件將導致遞迴變成無窮迴圈.
故在撰寫階乘時,
必須告知當最後一個變數為0時, 必須傳回一個為1的值.
public class Factorial { private int num; private int result = 1; public int factorial(int num) { if(num == 0){ // 當變數為0時, 便輸出值等於1, 而不再呼叫factorial() result = 1; return result; } else { result = num * factorial(num-1); return result; } } }
列出一個系統資料夾中的檔案時,
因為資料夾內不一定只含有檔案, 也可能含有資料夾,
故在處理時也可透過遞迴的概念處理,
其脫離迴圈的條件便是其檔案類型為資料而非資料夾.
import java.io.File; public class OpenFile { public void openFile(File[] fileArr, int space) { // 此部分為了讓輸出格式有資料層級感覺, 故在輸出字串前加入空白字元 String spaceString = ""; for(int j = 0; j < space; j++) { spaceString = spaceString + " "; } for(int i = 0; i < fileArr.length; i++){ if(fileArr[i].isDirectory()){ // 若檔案類型為資料夾, 將再次呼叫openFile() System.out.println(spaceString + "Driectory: " + fileArr[i].getName()); String pathName = fileArr[i].getAbsolutePath(); File file = new File(pathName); space++; openFile(file.listFiles(), space); } else { // 若檔案類型為資料, 將輸出資料名稱 System.out.println(spaceString + "File: " + fileArr[i].getName()); } } } }
沒有留言:
張貼留言