zoukankan      html  css  js  c++  java
  • Java 递归

    递归

            1,方法定义中自身调用自身的现象。

           2,注意事项:

                    1,递归方法没有出口,会成为无限循环,直到溢出。//StackOverflowError

                    2,递归次数过多,会导致栈内存溢出。

                    3,构造方法不能定义递归。

           3,案例:

                   1,求20的阶乘

    /** 
    *    求阶乘 :20!
    *    出口:当阶乘成为1的时候结束
    *    规律:n(n-1)!
    *
    */
    public class Recursion{
        public static void main(String[] args){
            System.out.println(rec(20));
        }
    
        public static int rec(int n ){
            if(n==1){
                return 1;    
            }else{
                return n*rec(n-1);
            }
        }
    }

                   2,古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问20个月的兔子对数为多少?

    /**
    *      分析:
    *              1,1,2,3,5,8,13.....
    *      出口:第1,2,3月已知
    *      规律:从第三项开始,第一项是前两项之和
    */
    public class Rabbit{
        public static void main(String[] args){
            System.out.println(getRabbit(20));
        }
        public static int getRabbit(int n){
            if(n==1||n==2){
                return 1;
            }else{
               return getRabbit(n-1)+getRabbit(n-2);
            }
        }
    }

                   3,输出d:\盘以.java结尾文件路径

    /**
    *       分析:
    *             1   创建目录,获取该目录的File数组         
    *             2   遍历File数组,获取每一个File对象
    *             3   判断该File是否是文件夹
    *                            是   回到第2步
    *                            否   是否以.java结尾
    *                                         是  输出该文件的绝对路径
    *                                         否  
    */
    public SearchDemo{
        public static void main(String[] args){
            File srcFile=new File("d:\");//d盘下目录过多,会报NullPointerExcetpion 
            getPath(srcFile);
        }    
        public static void getPath(File srcFile){
             File[] fileArray=srcFile.listFiles();
             for(File file: fileArray){
                 if(file.isDirectory()){
                     getPath(file); 
                 }else{
                     if(file.getName().endsWith(".java")){
                         System.out.println(file.getAbsolutePath());
                     }   
                 }     
             }
        }
    }

                   4,删除d:\盘以.java结尾的文件

    /**
    *      分析:
    *             1 封装目录,获取该目录的file数组
    *             2 获取每一个file数组
    *             3 判断是否为目录
    *                      是  返回第2步
    *                      否   是否以.java结尾
    *                                   是  删除
    *                                   否
    */
    public class DeleteDemo{
        public static void main(String[] args){
            File srcFile=new File("d:\"); //d盘下目录过多,会报NullPointerExcetpion
            deleteFile(srcFile);
        }
        public static void deleteFile(File srcFile){
            File[] fileArray=srcFile.listFiles();
            if(fileArray!=null){
                 for(File file: fileArray){
                    if(file.isDirectory()){
                        deleteFile(file);
                     }else{
                         if(file.getName().endsWith(".java")){
                            System.out.println(file.getName()+"-"file.delete());
                         }
                     }
                 System.out.println(srcFile.getName()+""+srcFile.delete());  //删除已经清空的文件夹         
                 }
            }
        }
    }

  • 相关阅读:
    派遣函数
    英文论文(1)
    状态机和时序图的“前世姻缘”
    线程安全性:原子性,安全性,加锁机制
    多线程程序中操作的原子性
    win10下安装Centos7总笔记!
    分支限界法---旅行售货员问题
    PHP+ajax聊天室源码!支持长轮循跟定时请求两种
    elasticsearch配置优化
    hbase region与内存的关系
  • 原文地址:https://www.cnblogs.com/zhanfuxing/p/3648420.html
Copyright © 2011-2022 走看看