当前位置: 首页 > 工具软件 > Recurrence > 使用案例 >

Recurrence递归

文英达
2023-12-01

直接递归和间接递归

直接:
a(){
         a();
}

间接:
a(){
    b();
}

b(){
    a();
}

使用前提

  • 要有条件限定:保证递归可以停下,否则发生栈内存溢出错误StackOverFlowError
  • 递归的次数不能太多次:发生栈内存溢出错误StackOverFlowError

a()方法会一直在栈内存中调用a方法,多了就会超出栈内存大小

使用

  1. 定义一个方法
  2. 在方法中:如果到达尽头(限定条件),则返回或输出;否则如果没有到达尽头,则再次调用本方法
 public static void main(String[] args) {
        System.out.println(add(10));
    }

    /*
    *   从1,2,3,4.....n的累加
    */
    public static  int  add(int n){
        if (n != 1) {
            return  add(n - 1) + n;
        }else{
            return 1;
        }

    }

递归实现遍历指定文件夹下的所有文件

public class DemoPrintAllFile {
    public static void main(String[] args) {
        File file = new File("src\\com");        //指定递归文件夹路径
        printAllFile(file);
    }

    /*
    * 采用递归方法遍历打印路径下所有文件
    */
    public static void printAllFile(File file){
        if(file != null) {
            File[] directory = file.listFiles(new FileFilter() {    //文件过滤器
                @Override
                public boolean accept(File pathname) {
                    return pathname.isDirectory() || pathname.getName().equals("i.txt");     //是“i.txt"或文件夹则返回true,即保留到directory中,返回false则抛弃 
                }
            });
            for (File f : directory) {    //遍历过滤过的file数组directory,,
                if(f.isDirectory())
                    printAllFile(f);   //是文件夹则继续调用遍历
                else
                    System.out.println(f.toString());   //是文件则输出
            }

           /* for (File file1 : directory) {
                if (file1.isFile()) {
                    if(file1.getName().equals("i.txt"))
                        System.out.println(file1);
                } else {
                    printAllFile(file1);
                }
            }*/
        }
    }
}

 

 类似资料: