博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Java递归:一个NB自慰的操作

Posted on 2018-06-04 20:42  牧魂人  阅读(258)  评论(0编辑  收藏  举报

递归的核心思想:自身调用自身

 

示例一:求5的阶乘

常规方法:

使用while循环

 1 public class Demo01 {
 2 
 3      public static void main(String[] args) {
 4          int result = test(5);
 5          System.out.println("结果是"+result);
 6      }
 7      
 8      public static int test(int num) {
 9         int result=1;
10         while (num>0) {
11             result=result*num;
12             num--;
13         }
14         return result;
15     }
16 }

 使用递归

 1 public class Demo01 {
 2 
 3      public static void main(String[] args) {
 4          int result = print(5);
 5          System.out.println("结果是"+result);
 6      }
 7      
 8      public static int print(int num) {
 9          if(num==1) {
10              return 1;
11          }else {
12              return num*print(num-1);
13          }
14      }
15 }

示例二:

列出一个文件夹的子孙文件与目录

 1 public class Demo01 {
 2 
 3      public static void main(String[] args) {
 4          File dir=new File("F:\\aa");
 5          listFiles(dir,"|--");
 6      }
 7      
 8      public static void listFiles(File dir, String space) {
 9          File[] files = dir.listFiles();
10          for(File file : files) {
11              if(file.isFile()) {
12                  System.out.println(space+file.getName());
13              }else if(file.isDirectory()) {
14                  listFiles(file, "|  "+space);
15              }
16          }
17      }
18 }

示例三:

删除一个非空的文件夹

 1 public class Demo01 {
 2 
 3      public static void main(String[] args) {
 4          File dir=new File("F:\\aa");//创建对象并指定
 5          deleteDir(dir);
 6      }
 7      
 8      public static void deleteDir(File dir) {
 9          File[] files = dir.listFiles();  //列出了所有的子文件
10          for(File file : files) {       //文件遍历查询
11              if(file.isFile()) {        //如果是文件,执行删除操作
12                  file.delete();
13              }else if(file.isDirectory()) {     //如果是文件夹,则再调用自身方法
14                  deleteDir(file);  //括号中的file只是名字,之所以为什么不是dir,只是将上面的名字又带入了deleteDir方法中
15              }
16          }
17      }
18 }