遞歸:方法定義中調用方法本身 如果是方法的嵌套調用 這不是遞歸基本思想就是“自己調用自己” 一個使用遞歸技術的方法將會直接或者間接的調用自己 幾個應註意的點: 遞歸一定要有出口否則就是死遞歸 遞歸的次數不能太多 否則就記憶體溢出 構造方法不能遞歸使用 例: 遞歸求n的階乘 有一對兔子,從出生後第3個月 ...
遞歸:方法定義中調用方法本身 如果是方法的嵌套調用 這不是遞歸
基本思想就是“自己調用自己” 一個使用遞歸技術的方法將會直接或者間接的調用自己
幾個應註意的點:
遞歸一定要有出口否則就是死遞歸
遞歸的次數不能太多 否則就記憶體溢出
構造方法不能遞歸使用
例:
public class DiGuiDemo { // public DiGuiDemo() { // DiGuiDemo(); // } }
遞歸求n的階乘
public class DiGuiDemo { public static void main(String[] args) { int jc = 1; for (int x = 2; x <= 5; x++) { jc *= x; } System.out.println("5的階乘是:" + jc); 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); } } }
有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問第二十個月的兔子對數為多少?
分析:我們要想辦法找規律 兔子對數
第一個月: 1
第二個月: 1
第三個月: 2
第四個月: 3
第五個月: 5
第六個月: 8
由此可見兔子對象的數據是: 1,1,2,3,5,8...
從第三項開始,每一項是前兩項之和
public static int fib(int n) { if (n == 1 || n == 2) { return 1; } else { return fib(n - 1) + fib(n - 2); } } }
把E:\JavaSE目錄下所有的java結尾的文件的絕對路徑給輸出在控制台
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()); } } } }