讓程式中的方法(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());
}
}
}
}
沒有留言:
張貼留言