zoukankan      html  css  js  c++  java
  • 递归

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

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

          2.构造方法不能递归

          3.递归次数不能过多

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

      直接递归称为方法自身调用自己。

       间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法

    例子1-3的和内存图

      

    package com.oracle.demo03;
    
    public class Demo02 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(add(5));
    	}
    	//用递归计算1-n的和
    	/*1-100=
    	 * 100+99+98--+1
    	 * 100+(100-1)+(99-1)+..+1
    	 * n+(n-1)+(n-1-1)+(n-1-1-1)+...+1
    	 * */
    	public static int add(int n){
    		if (n==1) {
    			return 1;
    		}else{
    			return n+add(n-1);
    		}
    	}
    
    }
    

      

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

    步骤 

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

             2. 调用getFileAll()方法

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

                      2.2 遍历得到每一个File对象

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

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

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

    package com.oracle.demo03;
    
    import java.io.File;
    
    public class Demo03 {
    
    	public static void main(String[] args) {
    		File f=new File("D:\demo1018");
    		get(f);
    	}
    	public static void get(File file) {
    		//获取file对象表示的文件下的所有文件和文件夹
    		File files[]=file.listFiles();
    		//遍历
    		for (File f : files) {
    			//如果是文件夹,则继续调用get方法获取改路径下的所有文件
    			if (f.isDirectory()) {
    				get(f);
    				System.out.println(f);
    			} else {
    				//如果是文件直接打印
    				System.out.println(f);
    			}
    		}
    	}
    }
    

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

    把递归打印所有子目录中的文件路径步骤中2.1改为通过FilenameFilter过滤器获取指定目录中的所有.txt类型的File对象

    package com.oracle.demo03;
    
    import java.io.File;
    
    public class Demo04 {
    
    	public static void main(String[] args) {
    		File f=new File("D:\demo1018");
    		get(f);
    	}
    	public static void get(File file) {
    		//获取file对象表示的文件下的所有文件和文件夹
    		File files[]=file.listFiles(new MyFilter());
    		//遍历
    		for (File f : files) {
    			//如果是文件夹,则继续调用get方法获取改路径下的所有文件
    			if (f.isDirectory()) {
    				get(f);
    				//System.out.println(f);
    			} else {
    				//如果是文件直接打印
    				System.out.println(f);
    			}
    		}
    	}
    }
    
    
    package com.oracle.demo03;
    
    import java.io.File;
    import java.io.FileFilter;
    
    public class MyFilter implements FileFilter {
    
    	public boolean accept(File pathname) {
    		if (pathname.exists()) {
    			if (pathname.isFile()) {
    				//获取file对象的文件名
    				//String name=pathname.getName().toLowerCase();
    				
    				return pathname.getName().toLowerCase().endsWith(".txt");
    			}
    			return true;
    		}
    		return false;
    	}
    	
    }
    

      

  • 相关阅读:
    DML和DQL语句
    MYSQL创建用户和授权方法(测试mysql5.7)
    安卓ViewPager中Button点击事件弹出Dialog
    安卓从popupwindow跳转到Activity页面
    Collect preferences failed, class java/lang/AutoCloseable not found in D:Program Files (x86)Androidandroid-sdkplatformsandroid-19android.jar
    安卓横屏布局设置
    C#控制台程序自动重启(检测是否连接网络)
    C++指针学习
    C++共享数据的保护
    C++结构体再学心得
  • 原文地址:https://www.cnblogs.com/zqy6666/p/12291704.html
Copyright © 2011-2022 走看看