遞歸: 就是函數(shù)自身調(diào)用自身。
什么時(shí)候用遞歸呢?
當(dāng)一個(gè)功能被重復(fù)使用,而每一次使用該功能時(shí)的參數(shù)不確定,都由上次的功能元素結(jié)果來確定。
簡(jiǎn)單說: 功能內(nèi)部又用到該功能,但是傳遞的參數(shù)值不確定。(每次功能參與運(yùn)算的未知內(nèi)容不確定)。
遞歸的注意事項(xiàng):
1:一定要定義遞歸的條件。
2:遞歸的次數(shù)不要過多。容易出現(xiàn) StackOverflowError 棧內(nèi)存溢出 錯(cuò)誤。
其實(shí)遞歸就是在棧內(nèi)存中不斷的加載同一個(gè)函數(shù)。
列出(或刪除)指定目錄下的所有文件
- 計(jì)算代碼
/**
* 找出指定目錄下的所有文件
* 遞歸
*
* @param files
* @return
*/
public static List<File> listFiles(File files) {
List<File> fileList = new ArrayList<>();
if (files.isDirectory()) {
for (File file : files.listFiles()) {
fileList.addAll(listFiles(file));
}
} else {
fileList.add(files);
}
return fileList;
}
- 測(cè)試代碼
public static void main(String args[]) {
List<File> l = listFiles(new File("E:\\kejiang\\IdeaProjects\\JavaProjectTest\\src"));
System.out.println("共" + l.size() + "個(gè)文件");
for (File f : l) {
System.out.println(f.getName());//(這里只打印了文件的文件名)
}
}
- 運(yùn)行效果
共23個(gè)文件
ArrayTest.java
Test.java
CopyTextFileTest.java
CopyTextFileTest_Copy.txt
RecursionTest.java
SystemIOTest.java
SystemOut.txt
ListTest.java
UserBean.java
UserComparator.java
Client.java
Server.java
StringTest.java
Consumer.java
Producer.java
ProducerConsumerTest.java
Resource.java
Consumer.java
MainTest.java
Producer.java
Resource.java
RunnableTest.java
ThreadTest.java
計(jì)算從1+2+3+...+N的和
- 算法代碼
/**
* 獲取從1+到N的和
*
* @param num
* @return
*/
public static int getSum(int num) {
if (num == 1) {
return 1;
}
return num + getSum(num - 1);
}
- 測(cè)試代碼
public static void main(String args[]) {
System.out.println(getSum(100));
}
- 運(yùn)行結(jié)果
5050