zoukankan      html  css  js  c++  java
  • 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");
    
        }
    
    }
    
     
  • 相关阅读:
    URL记录
    Mongodb集群节点故障恢复场景分析(转)
    IO 和 NIO 的区别
    VUE 前端项目优化方法
    缓存的穿透和雪崩
    接口如何处理重复请求?
    线程池构造类 ThreadPoolExecutor 的 5 个参数
    大型网站在架构上应当考虑哪些问题
    synchronized 和 lock 的区别
    JVM虚拟机 YGC和FGC发生的具体场景
  • 原文地址:https://www.cnblogs.com/layuechuquwan/p/11457394.html
Copyright © 2011-2022 走看看