递归

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

  注意 :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;
	}
	
}

  

原文地址:https://www.cnblogs.com/zqy6666/p/12291704.html