日期:2014-05-20  浏览次数:20825 次

两个递归方法的比较哪个思路更好一些,更效率一些。
public static void fun(File file)
{
        try
{
if(!file.isDirectory())
//首先判断传入的是不是目录,不是目录抛出异常。
throw new IOException();
else
{
File[] a = file.listFiles();  //是目录 建立file数组,并接收内容。
if(a!=null)
{
for(int x = 0; x<a.length;x++)   
{
if(a[x].isDirectory())
//遍历该数组,如果数组中的某个对象仍然是目录,进行递归,继续循环。
{
fun(a[x]);
}
else
System.out.print(a[x]+"\t\n" ) ;
//最后打印所有内容。
}
}
}
}
catch (IOException e)
{
System.out.println("您输入的不是目录。"+e.toString());
//简单的异常处理。
}








第二个方法:
public static void fun1(File file)
{
if(file.isDirectory())//判断是否是目录
{

{
File[] list = file.listFiles();
//是目录建立数组接收内容
if(list!=null){
for(int x = 0;x<list.length;x++)   
//遍历数组。
{

fun1(list[x]);      
  //每遍历一次都递归进行判断。
}
}}
}

System.out.println(file+"\t");

}


两个方法都是递归获取目录列表的,虽然第二个很简洁,但是觉得第二个没有第一个效率高,本人新手求大神分享下自己的看法,能带上原理就更加感谢了。

------解决方案--------------------
原理是这样的:

比如:
A文件夹下有B,C两个文件夹
B下有D,E两个文件夹。

找的顺序就是:A - B - D - E - C

每次走到目录最深,如果没有子目录了,就返回上一层目录。这种算法叫做“深度优先搜索”

其实我感觉方法一效率略高,因为在准备进入子目录的时候,先判断了一下是否为目录。如果不是就跳出。

虽然方法二第一步就是判断是否为目录,不过效率肯定不及第一种。