00088_递归
1、递归的概述
(1)递归,指在当前方法内调用自己的这种现象;
1 public void method(){ 2 System.out.println(“递归的演示”); 3 //在当前方法内调用自己 4 method(); 5 }
(2)直接递归:方法自身调用自己;
(3)间接递归:A方法调用B方法,B方法调用C方法,C方法调用A方法;
(4)递归的代码演示,计算1-n之间的和,使用递归完成;
1 public class DiGuiDemo { 2 public static void main(String[] args) { 3 // 计算1~n的和,使用递归完成 4 int n = 5; 5 int sum = getSum(n); 6 System.out.println(sum); 7 } 8 9 public static int getSum(int n) { 10 if (n == 1) { 11 return 1; 12 } else { 13 return n + getSum(n - 1); 14 } 15 } 16 }
(5)递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出;在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出;
2、递归打印所有子目录中的文件路径
编写一个方法用来打印指定目录中的文件路径,并进行方法的调用;
要求:若指定的目录有子目录,那么把子目录中的文件路径也打印出来。
1 public class FileDemo2 { 2 public static void main(String[] args) { 3 File file = new File("d:\\test"); 4 getFileAll(file); 5 } 6 //获取指定目录以及子目录中的所有的文件 7 public static void getFileAll(File file) { 8 File[] files = file.listFiles(); 9 //遍历当前目录下的所有文件和文件夹 10 for (File f : files) { 11 //判断当前遍历到的是否为目录 12 if(f.isDirectory()){ 13 //是目录,继续获取这个目录下的所有文件和文件夹 14 getFileAll(f); 15 }else{ 16 //不是目录,说明当前f就是文件,那么就打印出来 17 System.out.println(f); 18 } 19 } 20 } 21 }
3、搜索指定目录中的.java文件(含子目录)
需求:打印指定目录即所有子目录中的.java文件的文件路径;
要求:编写一个方法用来打印指定目录中的.java文件路径,并进行方法的调用;
若指定的目录有子目录,那么把子目录中的.java文件路径也打印出来。
(1)自定类继承FilenameFilter过滤器接口
1 //定义类实现文件名称FilenameFilter过滤器 2 class MyFileFilter implements FilenameFilter{ 3 public boolean accept(File dir, String name) { 4 return name.endsWith(".java"); 5 } 6 }
(2)测试类
1 public class FileDemo4 { 2 public static void main(String[] args) { 3 File file = new File("d:\\test"); 4 getFileAll(file); 5 } 6 //获取指定目录以及子目录中的所有的文件 7 public static void getFileAll(File file) { 8 File[] files = file.listFiles(MyFileFilter()); 9 //遍历当前目录下的所有文件和文件夹 10 for (File f : files) { 11 //判断当前遍历到的是否为目录 12 if(f.isDirectory()){ 13 //是目录,继续获取这个目录下的所有文件和文件夹 14 getFileAll(f); 15 }else{ 16 //不是目录,说明当前f就是文件,那么就打印出来 17 System.out.println(f); 18 } 19 } 20 } 21 }