博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结合File类浅析递归的使用
阅读量:5286 次
发布时间:2019-06-14

本文共 3263 字,大约阅读时间需要 10 分钟。

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

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

* 注意:
* 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:\Test\background.png::trueC:\Test\Cell.png::trueC:\Test\Test1\L.png::trueC:\Test\Test1\O.png::trueC:\Test\Test1::trueC:\Test\Test2\Test3\I.png::trueC:\Test\Test2\Test3\J.png::trueC:\Test\Test2\Test3::trueC:\Test\Test2::trueC:\Test::true

 

 

转载于:https://www.cnblogs.com/wsw-tcsygrwfqd/p/6606617.html

你可能感兴趣的文章
js重写原型对象
查看>>
$this的用法
查看>>
linux如何安装java环境
查看>>
Android中gravity的含义
查看>>
求大神给解决下,向已有的xml文件写入数据,但不覆盖文件存在的内容
查看>>
深入理解java嵌套类和内部类
查看>>
Linux守护进程的编程实现
查看>>
C语言指针的初始化和赋值
查看>>
JavaScript 输出
查看>>
python 函数(2)
查看>>
Python学习笔记1:python简介、输入输出、循环条件
查看>>
python学习笔记5:装饰器
查看>>
Android 开发环境配置
查看>>
skiing
查看>>
wxwidgets demo
查看>>
dubbo 实战总结
查看>>
bzoj1230 [Usaco2008 Nov]lites 开关灯
查看>>
Modulation of Lipid Metabolism by Celastrol (文献分享一组-赵倩倩)
查看>>
HDU 1044 Collect More Jewels(BFS+DFS)
查看>>
TrackbarCallback 回调函数必须为 void(int,void*)
查看>>