Java遞歸的整理帶三個小案例


  1.  1 package 遞歸的使用;
     2 /*
     3  * 實現5的階乘
     4  */
     5 public class DiGuiDemo {
     6     public static void main(String[] args) {
     7         System.out.println(JiCheng(5));
     8     }
     9     
    10     //遞歸計算階乘
    11     public static int JieCheng(int n){
    12         if(n == 1){
    13             return 1;
    14         }else {
    15             return n*JieCheng(n-1);  //自己調用自己 16         }
    17     }
    18 }
     3 /*
     4  * 獲取數列第二十個位置的數:
     5  * 數列的規律如下:1、1、2、3、5、8、13、21、34...切波那切數列
    * 三種方式
       1.使用數組獲取
    2.使用變量獲取
    3.使用遞歸實現  
    6 */ 7 public class DiGuiDemo2 { 8 public static void main(String[] args) { 9 /* 10 * 使用數組獲取: 11 */ 12 int[] arr = new int[20]; 13 arr[0] = 1; 14 arr[1] = 1; 15 // 循環增加 16 for (int x = 2; x < arr.length; x++) { 17 arr[x] = arr[x - 2] + arr[x - 1]; 18 } 19 System.out.println(arr[19]); 20 21 // 使用變量獲取 22 int a = 1; 23 int b = 1; 24 for (int x = 0; x < 18; x++) { 25 int tmp = a; 26 a = b; 27 b = tmp + b; 28 } 29 System.out.println(b); 30 31 // 32 System.out.println(birthRubbit(20)); 33 } 34 35 // 切波那切數列,生兔子算法 36 // 出口條件是第一個數是1,第二個數是1, 37 // 規律:從第三個月開始,每一個月都是前兩個月之和。 38 public static int birthRubbit(int n) { 39 if (n == 1 || n == 2) { 40 return 1; 41 } 42 return birthRubbit(n - 1) + birthRubbit(n - 2); 43 } 44 }

     

     1 2 
     3 import java.io.File;
     4 import java.io.FilenameFilter;
     5 import java.util.ArrayList;
     6 
     7 /*
     8  * 獲取指定盤符下的指定后綴的全部文件。
     9  */
    10 public class DiGuiDemo {
    11     public static void main(String[] args) {
    12         // 封裝路徑
    13         File file = new File("E:\\1-個人資料");
    14         // File[] fileArr = file.listFiles(new FilenameFilter() {
    15         // @Override
    16         // public boolean accept(File dir, String name) {
    17         // // TODO Auto-generated method stub
    18         // File file2 = new File(dir, name);
    19         // // System.out.println(dir + "--" + name);
    20         // if (file2.isDirectory()) {
    21         //
    22         // }
    23         // return false;
    24         // }
    25         // });
    26         // File[] fileArr = file.listFiles();
    27         // for (File f : fileArr) {
    28         // if (f.isFile()) {
    29         //
    30         // }
    31         // }
    32         getFile(file);
    33 
    34     }
    35 
    36     public static void getFile(File f) {
    37         File[] fileArr = f.listFiles();
    38         ArrayList<String> list = new ArrayList<String>();
    39         // 遍歷該集合
    40         // 如果得到的是一個文件同時該文件的后綴是.java那么久將該文件添加到list中,后面輸出
    //如果獲取到的文件對象仍然是一個文件夾那個繼續遞歸獲取該文件夾內部的文件,知道該最后的文件夾起內部全部為文件為止。
    41 42 for (File file : fileArr) { 43 if (file.isDirectory()) { 44 getFile(file); 45 } else if (file.getName().endsWith(".jpeg") 46 // || file.getName().endsWith(".jpg")此處可以通過添加||符號繼續添加查找的條件 47 ) { 48 // System.out.println(file.getAbsolutePath()); //獲取到的滿足條件的文件可以直接打印,或者將該文件對象存入的路徑存入list后續使用 49 list.add(file.getAbsolutePath()); 50 } 51 52 } 53 // 遍歷獲得的結果 54 for (String s : list) { 55 System.out.println(s); 56 } 57 58 } 59 }

    10:18:40在使用遞歸的時候,每一次的調用都會在棧內存中開辟一個內存加載該方法,執行完畢后,如果繼續遇到遞歸,那么繼續加載方法,一次遞歸,最后方法會一次銷毀,和棧的數據存儲一致,先進入的main函數加載在底部,最后被彈出輸出結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM