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函数加载在底部,最后被弹出输出结果。

posted @ 2016-03-26 10:08  我所向往的美好  阅读(4936)  评论(0编辑  收藏  举报