遞迴
方法的遞迴:方法定義中呼叫方法本身的現象
package com.shujia.day14;
/*
new StringBuffer().append().append() 這個叫方法的鏈式呼叫
show(fun1()) 方法的巢狀呼叫
遞迴必備前提:
1、進入遞迴的入口
2、方法要有返回值
3、結束遞迴的出口(如果沒有出口就是死遞迴)
案例1:
從前有座山,山裡有座廟,廟裡有個老和尚,老和尚在給小和尚講故事:n1
從前有座山,山裡有座廟,廟裡有個老和尚,老和尚在給小和尚講故事: n2
從前有座山,山裡有座廟,廟裡有個老和尚,老和尚在給小和尚講故事: n3
從前有座山,山裡有座廟,廟裡有個老和尚,老和尚在給小和尚講故事: n4
從前有座山,山裡有座廟,廟裡有個老和尚,老和尚在給小和尚講故事: n5
... n*
設定出口(結束條件):老和尚圓寂了,山倒了。
案例2:
學習大資料,為了找工作,為了賺錢,為了娶媳婦,為了生娃:
學習大資料,為了找工作,為了賺錢,為了娶媳婦,為了生娃:
學習大資料,為了找工作,為了賺錢,為了娶媳婦,為了生娃:
學習大資料,為了找工作,為了賺錢,為了娶媳婦,為了生娃:
...A
設定出口(結束條件):娶不到媳婦。
需求:求5的階乘
*/
public class DiGuiDemo1 {
public static void main(String[] args) {
System.out.println(jieCheng(5));
for (int i = 1; i < 10; i++) {
System.out.println(i);
}
}
// public static void fun1(){
// fun1();
// }
// 5! = 5*4*3*2*1;
public static int jieCheng(int number) {
//結束條件
if (number == 1) {
return 1;
} else {
return number * jieCheng(--number);
}
// return number * jieCheng(--number);// OOM (out of memory)
}
}
遞迴與File的結合練習1
package com.shujia.day15;
import java.io.File;
/*
遞迴遍歷E:\\目錄下指定字尾名結尾的檔名稱
遞迴方法的前提:
1、要有入口
2、方法要有返回值(看情況)
3、要有出口
分析:
1、將E盤封裝成File物件
2、獲取當前目錄下所有的檔案或者資料夾組成的File物件陣列
3、挨個遍歷每一個File物件
1)如果是一個檔案,且是以.java字尾的,那就輸出
2)如果是一個資料夾,回到第2步
*/
public class DiGuiTest1 {
public static void main(String[] args) {
File file = new File("E:\\");
show(file);
}
public static void show(File file){
//獲取當前目錄下所有的檔案或者資料夾組成的File物件陣列
File[] files = file.listFiles();
//挨個遍歷每一個File物件
if(files!=null){
for (File file1 : files) {
if(file1.isFile() && file1.getName().endsWith(".java")){
System.out.println(file1.getName());
}else {
show(file1);
}
}
}
}
}
遞迴與File的結合練習2
package com.shujia.day15;
import java.io.File;
/*
遞迴刪除帶內容的目錄 E:\\data
分析:
1、將E:\\data封裝成File物件
2、獲取File物件下面所有檔案和資料夾組成的File物件陣列
3、遍歷File物件陣列,判斷是否是檔案或者資料夾
1)如果是檔案,就直接delete
2)如果是資料夾,繼續回到第2步
*/
public class DiGuiTest2 {
public static void main(String[] args) {
File file = new File("E:\\data");
deleteFile(file);
}
public static void deleteFile(File file) {
File[] files = file.listFiles();
if (files != null) {
for (File file1 : files) {
if(file1.isFile()){
file1.delete();
}else {
deleteFile(file1);
}
}
}
file.delete();
}
}