递归,指在当前方法内调用本身的这种现象java
递归分为两种,直接递归和间接递归。ui
直接递归称为方法自身调用本身。间接递归能够A方法调用B方法,B方法调用C方法,C方法调用A方法。spa
l 递归的代码演示,计算1-n之间的和,使用递归完成code
public class DiGuiDemo { public static void main(String[] args) { //计算1~num的和,使用递归完成 int n = 5; int sum = getSum(n); System.out.println(sum); } public static int getSum(int n) { if(n == 1){ return 1; } return n + getSum(n-1); } }
注意:递归必定要有条件限定,保证递归可以中止下来,不然会发生栈内存溢出。对象
在递归中虽然有限定条件,可是递归次数不能太多。不然也会发生栈内存溢出blog
编写一个方法用来打印指定目录中的文件路径,并进行方法的调用继承
要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来递归
步骤:接口
1. 指定要打印的目录File对象内存
2. 调用getFileAll()方法
2.1 获取指定目录中的全部File对象
2.2 遍历获得每个File对象
2.3 判断当前File 对象是不是目录
判断结果为true,说明为目录,经过递归,再次调用步骤2的getFileAll()方法
判断结果为false,说明是文件,打印文件的路径
public class FileDemo2 { public static void main(String[] args) { File file = new File("d:\\test"); getFileAll(file); } //获取指定目录以及子目录中的全部的文件 public static void getFileAll(File file) { File[] files = file.listFiles(); //遍历当前目录下的全部文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的全部文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } }
需求:打印指定目录即全部子目录中的.java文件的文件路径
要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用
若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来
步骤:
1. 指定要打印的目录File对象
2. 调用getFileAll()方法,传入要打印的目录File对象
2.1 经过FilenameFilter过滤器获取指定目录中的全部.java类型的File对象
2.2 遍历获得每个File对象
2.3 判断当前File 对象是不是目录
判断结果为true,说明为目录,经过递归,再次调用步骤2的getFileAll()方法
判断结果为false,说明是文件,打印文件的路径
public class FileDemo4 { public static void main(String[] args) { File file = new File("d:\\test"); getFileAll(file); } //获取指定目录以及子目录中的全部的文件 public static void getFileAll(File file) { File[] files = file.listFiles(MyFileFilter()); //遍历当前目录下的全部文件和文件夹 for (File f : files) { //判断当前遍历到的是否为目录 if(f.isDirectory()){ //是目录,继续获取这个目录下的全部文件和文件夹 getFileAll(f); }else{ //不是目录,说明当前f就是文件,那么就打印出来 System.out.println(f); } } } } //自定类继承FilenameFilter过滤器接口 //定义类实现文件名称FilenameFilter过滤器 class MyFileFilter implements FilenameFilter{ public boolean accept(File dir, String name) { return name.endsWith(".java"); } }