递归

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

public static void a(){
   a();
}
  • 注意事项:

    1. 递归必须有出口

    2. 就算有出口, 执行的次数也不能过多

      package com.itheima._03recursive;
      /*
          递归求阶乘
          阶乘
              n的阶乘   n! = n * (n-1) * (n-2) * ... 2 * 1
      
      
      
              5! = 5 * 4 * 3 * 2 * 1
                   5 * 4!
                       4 * 3!
                           3 * 2!
                               2 * 1!
                                   1
      
              n! = n * (n-1)!
      
       */
      public class Demo01 {
          public static void main(String[] args) {
              System.out.println(getNum(5));
          }
      
          /*
              此方法用于递归求阶乘
           */
          public static int getNum(int n) {
              // 出口
              if (n == 1) {
                  return 1;
              }
              // n的阶乘  : n * (n-1)!
              return n * getNum(n - 1);
          }
      
      
          private static void demo01() {
              int num = 1;
      
              // 5的阶乘
              for (int i = 5; i > 0; i--) {
                  num = num * i;
              }
      
              System.out.println(num);
          }
      }
      

        

       

       

      package com.itheima._03recursive;
      
      import java.io.File;
      
      /*
          获取某一个文件夹中, 所有文件(包含每一层文件夹中的文件)
      
       */
      public class Demo02 {
          public static void main(String[] args) {
              File file = new File("C:\\");
              printFile(file);
      
          }
      
          /**
           * 此方法用于打印文件夹中的所有文件
           * @param file
           */
          public static void printFile(File file) {
              // 获取文件夹中所有的文件和文件夹
              File[] subFiles = file.listFiles();
              // 不得不躲开null出现的空指针异常
              if (subFiles != null) {
                  // 遍历数组, 获取每一个文件和文件夹
                  for (File subFile : subFiles) {
                      // 判断
                      // 如果是文件 -> 打印
                      if (subFile.isFile()) {
                          System.out.println(subFile);
                      } else {
                          // 如果是文件夹 -> 打印这个文件夹中的所有文件 -> 递归
                          // subFile 就是一个文件夹
                          printFile(subFile);
                      }
      
                  }
              }
          }
      }
      

        

      package com.itheima._03recursive;
      
      import java.io.File;
      
      public class Demo03 {
          public static void main(String[] args) {
              File file = new File("F:\\itheima");
              deleteDirectory(file);
          }
      
      
          /**
           * 此方法用于删除文件夹
           * * @param file
           */
          public static void deleteDirectory(File file) {
              // 获取文件夹中所有的文件和文件夹
              File[] subFiles = file.listFiles();
              // 遍历数组, 获取每一个文件和文件夹
              for (File subFile : subFiles) {
                  // 判断
                  // 如果是文件 -> 打印
                  if (subFile.isFile()) {
                      System.out.println(subFile.delete());
                  } else {
                      // subFile 就是一个文件夹
                      deleteDirectory(subFile);
                  }
              }
              // 循环外, 要删除file这个空文件夹
              file.delete();
          }
      }
      

        

posted @ 2021-05-26 21:14  步江伍德  阅读(16)  评论(0)    收藏  举报