递归的概述

递归,指在当前方法内调用自己的这种现象

public void method(){
    System.out.println(“递归的演示”);
    //在当前方法内调用自己
    method();
}

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

实例:

①计算1-n之间的和,使用递归完成

public class demo4 {
    //递归:要运行的方法主体不变,而参与运行的方法参数会变
    //递归必须要有一个出口,否则程序没有意义
    public static void main(String[] args) {
        System.out.println(getnum(1000));
    }
    //计算1-100和,用递归做
    public static int getnum(int n){
        if(n==1){
            return 1;
        }
        return n+getnum(n-1);
    }
    //3+getnum(2)
    //    2+getnum(1)
    //         1
    //最终赋值给调用者,往上一直传给调用者
}

②递归打印所有子目录中的文件路径

public class FileDemo2 {
    public static void main(String[] args) {
        File file = new File("d:\\test");
        getFileAll(file);
    }
    //获取指定目录以及子目录中的所有的文件
    public static void getFileAll(File file) {
        File[] files = file.listFiles();
        //遍历当前目录下的所有文件和文件夹
        for (File f : files) {
            //判断当前遍历到的是否为目录
            if(f.isDirectory()){
                //是目录,继续获取这个目录下的所有文件和文件夹
                getFileAll(f);
            }else{
                //不是目录,说明当前f就是文件,那么就打印出来
                System.out.println(f);
            }
        }
    }
}

搜索指定目录中的.java文件(含子目录)

 

public class myfl implements FileFilter{

    @Override
    public boolean accept(File pathname) {
        //如果是文件夹则不进行过滤,直接加到File数组中
        if(pathname.isDirectory()){
            return true;
        }
        return pathname.getName().toLowerCase().endsWith(".java");
    }

}

 

//找到指定目录下的所有指定文件类型的文件
public class demo5 {
    public static void main(String[] args) {
        File file=new File("e:\\test");
        getallfile(file);
    }
    public static void getallfile(File file){
        File[] files=file.listFiles(new myfl());
        for(File f:files){
            if(f.isDirectory()){
                getallfile(f);
            }else{
                System.out.println(f);
            }
        }
    }
}

④计算n!

public class demo6 {
    public static void main(String[] args) {
        System.out.println(getnum(20));
    }
    public static long getnum(int n){
        if(n==1){
            return 1;
        }
        return n*getnum(n-1);
    }
}

 

posted on 2018-08-20 16:58  落雨无晴  阅读(171)  评论(0编辑  收藏  举报