java递归api_javaAPI_IO流基础_递归使用
IO流_遞歸
1.遞歸概述
遞歸指的是方法定義中調用自身方法的情況。
2.遞歸的注意事項
(1).要有出口,否則就是死遞歸
(2).次數不能太多,否則就內存溢出
(3).構造方法不能遞歸使用[不然在創建對象的時候就會內存溢出]
3.遞歸解決問題的思想
(1).分解法:
把問題細分為一個基本皆可以解決的單元,如:7+8 = ? --> 3+4 =? 4+4 =? --->1+2 =?----> 1+1 =2;
(2).合并發:
合并發就是把細分好的每一個基本單元合并成為我們要解決的問題,如上所述
4.遞歸實現的步驟以及注意事項
(1).寫一個方法
(2).出口條件(這是一個已知條件*****)
(3).規律
5.遞歸的基本代碼實現[求:5的階乘]
public static void main(String[] args) {
System.out.println("5的階乘是:"+jieCheng(5));
}
/*
* 做遞歸要寫一個方法:
* 返回值類型:int
* 參數列表:int n
* 出口條件:
* if(n == 1) {return 1;}
* 規律:
* if(n != 1) {return n*方法名(n-1);}
*/
public static int jieCheng(int n){
if(n==1){
return 1;
}else {
return n*jieCheng(n-1);
}
}
6.遞歸相關練習
(1).遞歸輸出斐波那契數列:
/*
* 有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問第二十個月的兔子對數為多少?
* 分析:我們要想辦法找規律
* 兔子對數
* 第一個月: 1
* 第二個月: 1
* 第三個月: 2
* 第四個月: 3
* 第五個月: 5
* 第六個月: 8
* ...
*
* 由此可見兔子對象的數據是:
* 1,1,2,3,5,8...
* 規則:
* A:從第三項開始,每一項是前兩項之和
* B:而且說明前兩項是已知的
*/
/*
* 方法: 返回值類型:int
* 參數列表:int n
* 出口條件: 第一個月是1,第二個月是1 規律: 從第三個月開始,每一個月是前兩個月之和
*/
public static int fib(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return fib(n - 1) + fib(n - 2);
}
}
(2)遞歸遍歷目錄下指定后綴名結尾的文件名稱:[*******]
/*
* 需求:請大家把E:\JavaSE目錄下所有的java結尾的文件的絕對路徑給輸出在控制臺。
*
* 分析:
* A:封裝目錄
* B:獲取該目錄下所有的文件或者文件夾的File數組
* C:遍歷該File數組,得到每一個File對象
* D:判斷該File對象是否是文件夾
* 是:回到B
* 否:繼續判斷是否以.java結尾
* 是:就輸出該文件的絕對路徑
* 否:不搭理它
*/
public class FilePathDemo {
public static void main(String[] args) {
// 封裝目錄
File srcFolder = new File("E:\\JavaSE");
// 遞歸功能實現
getAllJavaFilePaths(srcFolder);
}
private static void getAllJavaFilePaths(File srcFolder) {
// 獲取該目錄下所有的文件或者文件夾的File數組
File[] fileArray = srcFolder.listFiles();
// 遍歷該File數組,得到每一個File對象
for (File file : fileArray) {
// 判斷該File對象是否是文件夾
if (file.isDirectory()) {
getAllJavaFilePaths(file);
} else {
// 繼續判斷是否以.java結尾
if (file.getName().endsWith(".java")) {
// 就輸出該文件的絕對路徑
System.out.println(file.getAbsolutePath());
}
}
}
}
}
(3)遞歸刪除帶內容的目錄[就是刪除多級目錄,從文件開始一級一級的往上面刪除]
/*
* 需求:遞歸刪除帶內容的目錄
*
* 目錄我已經給定:demo
*
* 分析:
* A:封裝目錄
* B:獲取該目錄下的所有文件或者文件夾的File數組
* C:遍歷該File數組,得到每一個File對象
* D:判斷該File對象是否是文件夾
* 是:回到B
* 否:就刪除
*/
public class FileDeleteDemo {
public static void main(String[] args) {
// 封裝目錄
File srcFolder = new File("demo");
// 遞歸實現
deleteFolder(srcFolder);
}
private static void deleteFolder(File srcFolder) {
// 獲取該目錄下的所有文件或者文件夾的File數組
File[] fileArray = srcFolder.listFiles();
if (fileArray != null) {
// 遍歷該File數組,得到每一個File對象
//刪除文件
for (File file : fileArray) {
// 判斷該File對象是否是文件夾
if (file.isDirectory()) {
deleteFolder(file);
} else {
System.out.println(file.getName() + "---" + file.delete());
}
}
//刪除文件夾
System.out.println(srcFolder.getName() + "---" + srcFolder.delete());
}
}
}
總結
以上是生活随笔為你收集整理的java递归api_javaAPI_IO流基础_递归使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滴滴出行
- 下一篇: iOS16.4怎么样iPhone14机型