zoukankan      html  css  js  c++  java
  • 结合File类浅析递归的使用

    递归算法就是方法自身直接或者间接地调用到了自身,它是一种写起来很简单,但理解起来不那么简单的算法。

    一个功能在被重复地调用,并且运算的结果和上一次的调用有关, 这种时候,可以使用递归。

    * 注意:
    * 1.递归一定要明确递归结束的条件,否则会栈溢出
    * 2.注意解决问题的递归次数,如果次数过多,也会发生栈溢出。

    比较经典的例子有斐波那契数列、汉诺塔等,这里我们谈谈递归在File类中的使用。

    一、牛刀小试

    先看,两个简单的例子来了解递归。

     1 public class RecursionDemo {
     2 
     3     public static void main(String[] args) {
     4 
     5         System.out.println(getSum(6));//21
     6         toBinary(9);//1001
     7     }
     8     
     9     //十进制转换为二进制
    10     public static void toBinary(int num){
    11         if(num>0){
    12             toBinary(num/2);
    13             System.out.print(num%2);
    14         }
    15     }
    16     
    17     //连续的加法
    18     public static int getSum(int num){
    19         if(num==1)
    20             return 1;
    21         return num+getSum(num-1);
    22     }
    23 }

    二、File类应用1

    练习:列出某目录下的内容(包含子目录中的内容),
    即进行深度遍历.并且显示出目录层级。

     1 package www.brighten.io;
     2 
     3 import java.io.File;
     4 
     5 public class FileTraversalTest {
     6 
     7     public static void main(String[] args) {
     8         //定义目录层级
     9         int level=0;
    10         //创建要列出的目录
    11         File dir=new File("D:\workplace\BumpGame\src");
    12         listAll(dir,level);
    13     }
    14 
    15     public static void listAll(File dir, int level) {
    16         System.out.println(getSpace(level)+dir.getName());
    17         File[] files=dir.listFiles();
    18         level++;
    19         for (int i = 0; i < files.length; i++) {
    20             if(files[i].isDirectory()){//如果是目录
    21                 listAll(files[i], level);//递归
    22             }
    23             else//如果是文件
    24             {
    25                 //打印出文件的名字,并在文件名前面加上相应目录层级的缩进
    26                 System.out.println(getSpace(level)+files[i].getName());
    27             }
    28         }
    29     }
    30 /**
    31  * 计算不同目录层级的缩进
    32  * @param level 目录层级
    33  * @return  String类型的缩进符号
    34  */
    35     public  static String getSpace(int level) {
    36         StringBuilder space=new StringBuilder();
    37         space.append("|--");
    38         for (int i = 0; i <= level; i++) {
    39             space.insert(0, "    ");
    40         }
    41         return space.toString();
    42     }
    43 
    44 }

    程序输出如下:

       |--src
            |--com
                |--wsw
                    |--bump
                        |--Ball.java
                        |--Board.java
                        |--BumpGame.java
                        |--MoveObject.java
                        |--思路

    三、File类练习2

    练习:删除一个目录。

    思路:需要从里向外删除,要进行深度遍历,使用递归算法。

     1 package www.brighten.io;
     2 import java.io.File;
     3 
     4 public class RemoveDirTest {
     5 
     6     public static void main(String[] args) {
     7 
     8         File dir=new File("C:\Test");
     9         removeDir(dir);
    10     }
    11 
    12     public  static void removeDir(File dir) {
    13         File[] files=dir.listFiles();
    14         for(File file:files){
    15             if(file.isDirectory()){
    16                 removeDir(file);
    17             }else{
    18                 System.out.println(file+"::"+file.delete());//删除文件
    19             }
    20         }
    21         System.out.println(dir+"::"+dir.delete());//删除内容已经为空的目录
    22     }
    23 
    24 }

    程序输出如下,可以看出删除的顺序是把目录中的内容依次删除,然后再删掉这个目录,递归下去,最后删除最上一级的目录。

    所有做删除结果反馈的语句都显示为“true”,可见目录删除成功。

    C:Testackground.png::true
    C:TestCell.png::true
    C:TestTest1L.png::true
    C:TestTest1O.png::true
    C:TestTest1::true
    C:TestTest2Test3I.png::true
    C:TestTest2Test3J.png::true
    C:TestTest2Test3::true
    C:TestTest2::true
    C:Test::true

     

  • 相关阅读:
    [BX]和loop指令02 零基础入门学习汇编语言24
    第一个程序03 零基础入门学习汇编语言22
    第一个程序03 零基础入门学习汇编语言22
    第一个程序02 零基础入门学习汇编语言21
    [BX]和loop指令01 零基础入门学习汇编语言23
    [BX]和loop指令03 零基础入门学习汇编语言25
    [BX]和loop指令03 零基础入门学习汇编语言25
    [BX]和loop指令02 零基础入门学习汇编语言24
    第一个程序02 零基础入门学习汇编语言21
    不要焦急——把您的应用程序转移到公共云的正确方法
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/6606617.html
Copyright © 2011-2022 走看看