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 }

  

原文地址:https://www.cnblogs.com/gzdlh/p/8095762.html