io流--递归

递归:

自己调用自己:

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

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

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

 

      public static void main(String[] args) {

         a();

       }

            

             //递归

             /*  注意事项

*1.必须有出口,否则无意义

              *  2.构造方法不能递归

              *  3.递归的次数不能过多(内存有限)

              *  */  

             public static void a(){

               a();

             }

}

 

注意:递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

 

 

 public static void main(String[] args) {

     // 用递归计算1-100的和

     int sum=get(100);

     System.out.println(sum);

     int con=getn(5);

     System.out.println(con);

 

  }

 public static int  get(int n){

   if(n==1){

      return 1;

   }

   return n+get(n-1);

   }

 

 public  static int getn(int a){

   if(a==1){

      return 1;

   }

   return a*getn(a-1);

 }

 

斐波那契数列

 

 

 

public static void main(String[] args) {

      // TODO Auto-generated method stub

      int sum =get(12);

      System.out.println(sum);

 

   }

   public static  int get(int n){

      //出口    判断条件是最后的出口

      if(n==1){

         return 1;

      }

      if(n==2){

         return 1;

      }

      return get(n-1)+get(n-2);

   }

}

 

结果:144

 

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

步骤:

         1. 指定要打印的目录File对象

         2. 调用getFileAll()方法

                   2.1 获取指定目录中的所有File对象

                   2.2 遍历得到每一个File对象

                   2.3 判断当前File 对象是否是目录

                            判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法

                            判断结果为false,说明是文件,打印文件的路径

 

package com.oracle.demo01;

 

import java.io.File;

 

public class demo05 {

 public static void main(String[] args) {

  File file=new File("D:\\demo0611");

   getFile(file);

}

  public static void getFile(File file){

    //打印文件夹名

    System.out.println(file);

     //获取改目录下的所有文件和文件加

    File[] files= file.listFiles();

    //便利

    for(File f:files){

       //判定-

       if(f.isDirectory()){

         //-如果是文件夹就继续打印

         getFile(f);//继续调用(f)再一次传入

       }

       else{//如果f不是文件加,继续打印

          System.out.println(f);

       }

      

    }

  }

}

 

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

需求:打印指定目录即所有子目录中的.java文件的文件路径

要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用

若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来

步骤:

       1. 指定要打印的目录File对象

       2. 调用getFileAll()方法,传入要打印的目录File对象

              2.1 通过FilenameFilter过滤器获取指定目录中的所有.java类型的File对象

              2.2 遍历得到每一个File对象

              2.3 判断当前File 对象是否是目录

                     判断结果为true,说明为目录,通过递归,再次调用步骤2的getFileAll()方法

                     判断结果为false,说明是文件,打印文件的路径

1.1                   实现代码步骤

l  测试类

publicclass FileDemo4 {

    publicstaticvoid main(String[] args) {

       File file = new File("d:\\test");

       getFileAll(file);

    }

    //获取指定目录以及子目录中的所有的文件

    publicstaticvoid getFileAll(File file) {

       File[] files = file.listFiles(MyFileFilter());

       //遍历当前目录下的所有文件和文件夹

       for (File f : files) {

           //判断当前遍历到的是否为目录

           if(f.isDirectory()){

              //是目录,继续获取这个目录下的所有文件和文件夹

              getFileAll(f);

           }else{

              //不是目录,说明当前f就是文件,那么就打印出来

              System.out.println(f);

           }

       }

    }

}

l  自定类继承FilenameFilter过滤器接口

//定义类实现文件名称FilenameFilter过滤器

class MyFileFilter implements FilenameFilter{

    publicboolean accept(File dir, String name) {

       return name.endsWith(".java");

    }

}

 

 

posted @ 2019-09-04 10:21  腊月出去玩  阅读(130)  评论(0编辑  收藏  举报