递归

/*
 * 递归:方法定义中调用方法本身的现象
 *
 * 方法的嵌套
 * Math.max(Math.max(a,b),c)
 *
 * public void show(int n){
 *         if(n<=0){
 *                 System.exit(0);
 *         }
 *         System.out.println(n);
 *         show(--n);
 * }
 *
 * 注意事项:
 *         A:递归一定要有出口,否则就是死递归
 *         B: 递归的次数不能太多,否则内存溢出
 *         C:构造方法不允许递归调用
 */

案例1:

package com.digui.gz_02;

/*
 * 请用代码实现求5的继承
 * 
 * 5!=1*2*3*4*5
 * 5!=5*4!
 * 
 * 循环实现
 * 递归实现
 *         a:做递归要写一个方法
 *         b:出口条件
 *         c:规律
 * 
 * 
 */

public class DiGuiDemo {
    public static void main(String[] args) {
//        int jc=1;
//        for(int i=2;i<=5;i++){
//            jc*=i;
//        }
        System.out.println("5的阶乘是:"+JC(5));
    }
    
    /*
     *做递归要写一个方法:
     *    返回值类型 int
     *    参数列表:int n
     *    出口条件:
     *        if(n==1){return 1;}
     *    规律:
     *        if(n!=1){return n*方法名(n-1);}
     *
     */
    public static int JC(int n){
        if(n==1){
            return 1;
        }else{
            return n*JC(n-1);
        }
    }
}
View Code

案例2:

package com.digui.gz_02;

/*
 * 有一对兔子,从出生后第三个月后起每一个月都生一对兔子,小兔子长到第三个月后又生一对兔子,假设兔子都不死,问每个月兔子对数为多少?
 *
 *学会推规则而不是心里臆测:
 *第一个月:    1
 *第二个月:    1
 *第三个月:    2
 *第四个月:    3
 *第五个月:    5
 *第六个月:    8
 *...
 *由此可见:
 *    1,1,2,3,5,6,...
 */
public class DiGuiDemo2 {
    public static void main(String[] args) {
        
        System.out.println(rabbitCount(20));
    }
    /*
     * 返回值类型 int
     * 参数列表 int n
     * 出口条件(已知条件):第一个月和第二个月是1
     * 规律:从第三个月开始兔子数是前两项之和
     */
    public static int rabbitCount(int time){
        if(time<3){
            return 1;
        }else{
            return rabbitCount(time-1)+rabbitCount(time-2);
        }
        
    }
}
View Code

案例3和4

package com.digui.gz_02;

import java.io.File;
//import java.util.ArrayList;

/*
 * 递归遍历指定目录下的指定后缀文件
 */
public class DiGuiDemo3 {
//    static ArrayList<File> fileArray=new  ArrayList<File>();
    public static void main(String[] args) {
        File file=new File("C:\Users\Administrator.PMIMP83HWNIKWOV\Desktop\suibianwanwan");
        getFileClass(file);
//        System.out.println(fileArray.size());
//        for(File f:fileArray){
////            System.out.println(f.getName());
//            System.out.println(f.getAbsolutePath());
//        }
    }
    
    
    /*
     * 返回值类型 void
     * 参数列表  文件夹File
     * 出口条件:文件,后缀名是.class
     * 
     * 
     */
    public static void getFileClass(File file){
        File[] files=file.listFiles();
        for(File f:files){
            if(f.isDirectory()){
                getFileClass(f);
            }else{
                if(f.getName().endsWith(".class")){
                    System.out.println(f.getAbsolutePath());
//                    fileArray.add(f);
                }
            }
        }
    }
}
View Code
package com.digui.gz_02;

import java.io.File;

/*
 * 递归删除带内容的目录
 */
public class DiGuiDemo4 {
    public static void main(String[] args) {
        File file=new File("C:\Users\Administrator.PMIMP83HWNIKWOV\Desktop\suibianwanwan");
        removeFile(file);
    }
    public static void removeFile(File file){
            File[] files=file.listFiles();
                for(File f:files){
                    if(f.isFile()){
                        f.delete();
                        System.out.println("文件------"+f.getName()+"--------删除");
                    }else{
                        removeFile(f);
                    }                
                }
                System.out.println("文件夹------"+file.getName()+"--------删除");
                file.delete();
            }        
            
        
    
}
View Code
原文地址:https://www.cnblogs.com/aigeileshei/p/5572437.html