递归

递归:函数的自身调用函数的自身
递归的使用前提:必须要有结束条件的情况下调用。
案例0:算出5的阶乘。 5! = 5 * 4 * 3 * 2 * 1
   
   
  1. package com.cn.recursion;
  2. /**
  3. * Author:Liu Zhiyong(QQ:1012421396)
  4. * Version:Version_1
  5. * Date:2016年8月2日19:56:37
  6. * Desc:
  7. 递归:函数的自身调用函数的自身
  8. 递归的使用前提:必须要有结束条件的情况下调用。
  9. 案例:算出5的阶乘。 5! = 5 * 4 * 3 * 2 * 1
  10. */
  11. public class Demo1 {
  12. public static void main(String[] args) {
  13. /* int result = factorial1(5);
  14. System.out.println(result);*/
  15. int result = factorial2(5);
  16. System.out.println(result);
  17. }
  18. /**
  19. * 方式1
  20. * 需求:算出5的阶乘。 5! = 5 * 4 * 3 * 2 * 1
  21. * @return
  22. */
  23. public static int factorial1(int num){
  24. int result = 1;
  25. while(num > 0){
  26. result = result*(num--);
  27. }
  28. return result;
  29. }
  30. /**
  31. * 方式2 递归
  32. * 需求:算出5的阶乘。 5! = 5 * 4 * 3 * 2 * 1
  33. * @param num
  34. * @return
  35. */
  36. public static int factorial2(int num){
  37. if(num == 1){
  38. return 1;
  39. }else if(num < 0){
  40. throw new RuntimeException("参数不能为负数");
  41. }else{
  42. // return num*factorial2(num--); //× 5*5*55*5*55*5*55*5*5......
  43. return num*factorial2(--num); //5*4*3*2*1
  44. }
  45. }
  46. }

案例1:列出一个文件夹的子孙文件与目录。
案例2:列出指定目录中所有的子孙文件与子孙目录名,要求名称前面要有相应数量的空格:
        第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。
案例3:列出指定目录中所有的子孙文件与子孙目录名,要求要是树状结构,效果如下所示:
    |--src
        |   |--cn
        |   |   |--itcast
        |   |   |   |--a_helloworld
        |   |   |   |   |--HelloWorld.java
        |   |   |   |--b_for
        |   |   |   |   |--ForTest.java
        |   |   |   |--c_api
        |   |   |   |   |--Student.java
        |--bin
        |   |--cn
        |   |   |--itcast
        |   |   |   |--i_exception
        |   |   |   |   |--ExceptionTest.class
        |   |   |   |--h_linecount
        |   |   |   |   |--LineCounter3.class
        |   |   |   |   |--LineCounter2.class
        |   |   |   |   |--LineCounter.class
        |--lib
        |   |--commons-io.jar
案例4:删除一个非空的文件夹。
案例5:剪切一个非空目录。  (见下一个笔记,《剪切(使用File类的renameTo 方法和递归实现非空目录的剪切)》)
  
  
  1. package com.cn.recursion;
  2. import java.io.File;
  3. /**
  4. * Author:Liu Zhiyong(QQ:1012421396)
  5. * Version:Version_1
  6. * Date:2016年8月2日21:36:36
  7. * Desc:
  8. 案例1:列出一个文件夹的子孙文件与目录。
  9. 案例2:列出指定目录中所有的子孙文件与子孙目录名,要求名称前面要有相应数量的空格:
  10. 第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。
  11. 案例3:列出指定目录中所有的子孙文件与子孙目录名,要求要是树状结构,效果如下所示:
  12. |--src
  13. | |--cn
  14. | | |--itcast
  15. | | | |--a_helloworld
  16. | | | | |--HelloWorld.java
  17. | | | |--b_for
  18. | | | | |--ForTest.java
  19. | | | |--c_api
  20. | | | | |--Student.java
  21. |--bin
  22. | |--cn
  23. | | |--itcast
  24. | | | |--i_exception
  25. | | | | |--ExceptionTest.class
  26. | | | |--h_linecount
  27. | | | | |--LineCounter3.class
  28. | | | | |--LineCounter2.class
  29. | | | | |--LineCounter.class
  30. |--lib
  31. | |--commons-io.jar
  32. 案例4:删除一个非空的文件夹。
  33. 案例5:剪切一个非空目录。
  34. */
  35. public class Demo2 {
  36. public static void main(String[] args) {
  37. File dir = new File("f:/a");
  38. //测试1
  39. // listFile(dir);
  40. //测试2
  41. // listFile2(dir, "");
  42. //测试3
  43. // listFile3(dir, "|--");
  44. //测试4
  45. // deleteFile(dir); //使用此方法注意,会删除文件,不要随意删除。
  46. }
  47. /**
  48. * 列出一个文件夹中的所有子孙文件与目录
  49. * @param file
  50. */
  51. public static void listFile(File file){
  52. File[] listFiles = file.listFiles();
  53. for(File f : listFiles){
  54. if(f.isFile()){
  55. System.out.println("文件名:" + f.getName());
  56. }else if(f.isDirectory()){//目录
  57. System.out.println("文件夹:"+ f.getName());
  58. listFile(f);
  59. }
  60. }
  61. }
  62. /**
  63. * 案例2:列出指定目录中所有的子孙文件与子孙目录名,要求名称前面要有相应数量的空格:
  64. * 第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。
  65. * @param file
  66. */
  67. public static void listFile2(File file, String space){
  68. File[] listFiles = file.listFiles();
  69. for(File f : listFiles){
  70. if(f.isFile()){
  71. System.out.println(space+ f.getName());
  72. }else if(f.isDirectory()){//文件名
  73. System.out.println(space+ f.getName());
  74. listFile2(f, space+" ");
  75. }
  76. }
  77. }
  78. //案例3:列出指定目录中所有的子孙文件与子孙目录名,要求要是树状结构,效果如上所示。
  79. public static void listFile3(File file, String space){
  80. File[] listFiles = file.listFiles();
  81. for(File f : listFiles){
  82. if(f.isFile()){
  83. System.out.println(space + f.getName());
  84. }else if(f.isDirectory()){//文件名
  85. System.out.println(space+ f.getName());
  86. listFile3(f, "| " + space);
  87. }
  88. }
  89. }
  90. //案例4:删除一个非空的文件夹。
  91. public static void deleteFile(File dir){
  92. File[] listFiles = dir.listFiles();
  93. for(File f : listFiles){
  94. if(f.isFile()){
  95. f.delete();
  96. }else if(f.isDirectory()){//文件名
  97. deleteFile(f);
  98. }
  99. }
  100. dir.delete();
  101. }
  102. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值