Java實用方法整理(十八)——遞迴
阿新 • • 發佈:2018-12-17
1,遞迴方法注意事項
(1)遞迴一定要有出口,否則就是死遞迴
(2)遞迴的次數不能太多,否則就記憶體溢位
(3)構造方法不能遞迴使用
2,遞迴方法建立技巧
(1)遞迴是一個方法
(2)方法中要有出口(例如:return,輸出命令等)
(3)尋找規律,以程式碼實現規律
3,案例+原始碼
(1)有一對兔子,從出生後第3個月起每個月都生1對兔子,小兔子長到第3個月後每個月又生1對兔子,假如兔子都不死,那麼第N個月時兔子的對數是多少?
分析前6個月兔子對數規律如下:從第三個月開始,每個月兔子數等於前兩個月兔子數之和。
月數 | 1 | 2 | 3 | 4 | 5 | 6 |
兔子數 | 1 | 1 | 2 | 3 | 5 | 8 |
package test; /** * @author Manduner_TJU * @version 建立時間:2018年10月26日下午7:32:43 */ //不死神兔問題 public class Test2 { public static void main(String[] args) { int n = 20; System.out.println(digui(n)); } public static int digui(int n) { if(n == 1 || n == 2) { return 1; }else { return digui(n-2) + digui(n-1); } } }
(2)輸出我的電腦G盤目錄下所有以“.mkv”結尾的檔案的絕對路徑
package test; import java.io.File; /** * @author Manduner_TJU * @version 建立時間:2018年10月26日下午9:42:39 */ public class Test4 { public static void main(String[] args) { File file = new File("G:\\"); getAviPath(file); } private static void getAviPath(File file) { File[] ff = file.listFiles(); //由於我的電腦G盤目錄下有系統自帶的隱藏資料夾,會導致ff為null,所以做出了以下判斷 //本人建議不管是遍歷磁碟根目錄還是某個資料夾,都要加上下面的判斷,否則會報空指標錯誤 if (ff == null) { return; } for(File f : ff) { if(f.isFile()) { if(f.getName().endsWith(".mkv")) { System.out.println(f.getAbsolutePath()); } }else { getAviPath(f); } } } }
(3)刪除我的電腦G盤目錄下Test資料夾(注意,此功能慎用,萬一刪錯檔案夾了,可就恢復不了了)
package test;
import java.io.File;
/**
* @author Manduner_TJU
* @version 建立時間:2018年10月26日下午10:31:41
*/
public class Test5 {
public static void main(String[] args) {
File file = new File("G:\\Test");
deleteTestFile(file);
}
private static void deleteTestFile(File file) {
File[] ff = file.listFiles();
if(ff==null) {
return;
}else {
for(File f : ff) {
if(f.isDirectory()) {
deleteTestFile(f);
}else {
System.out.println(f.getName()+"----"+f.delete());
}
}
}
System.out.println(file.getName()+"----"+file.delete());
}
}