递归 列出指定目录下所有文件和文件夹包括子目录 public static void main(String[] args){ File dir = new File("d:\\java"); //创建File对象 showDir(dir); } public static void showDir(File dir){ System.out.println(dir); //输出文件夹 File[] files = dir.listFiles(); //创建数组 for(int x=0; x<files.length; x++){ if(files[x].isDirectory()) //如果文件是目录 showDir(files[x]); //循环调用 else System.out.println(files[x]); } } 递归,你可以想想成循环。for循环也可以看作类似递归的东西。
但是循环和递归有个本质区别在于,for循环,是在循环外,进行判断,以决定是否直接退出。而递归,是在循环体内判断,是否退出本次循环。这里就有两个差别了。
你可以把递归看做到楼顶取东西。从一楼爬,看,不是的,继续爬,每层楼梯看上去都一样,你执行的过程都一样,但是实际上,1到2,2到3的楼梯是两个楼梯,等你到楼顶了,取了东西,你不能直接就跳楼,还得从楼顶一层层退回来。
而驴子拉磨,则属于for循环。无论跑多少次,都是在原地。变化的只是磨盘里磨的东西,而不是驴每圈所在的不同位置。
循环可以实现大部分的功能,但有些功能需要大量的循环调用,且自身调用自身。可以采用递归,有利于程序的可读性。
循环更加高效些,当一次循环结束就会释放内存。而递归则会调用一次在内存中占用一次空间,只有当调用完最后一次才会释放内存。
|