首先我们说一下递归和循环的区别吧
相同点:他们都是通过循环来达到想要的结果,都是通过一个条件作为出口,没有出口就会死循环
不同点:循环只是方法内的一个循环体而已,递归则是一个方法,方法自己调用自己的方法。
说到这里是不是想问,既然有循环干嘛还需要递归呢?
其实这个问题也很好理解,通常我们递归用到的最多的是循环目录结构,树结构的目录都会用到递归,用循环很难实现,话不多说我们直接上代码。
import java.io.File;
/**
* 递归和for
* @author Yonim
*
*/
public class Recursive {
// 使用递归遍历文件夹
public String test1(String url) {
System.err.println("传输的路径"+url);
File file = new File(url);
if(file.isDirectory()) { // 判断是否文件夹
File[] str = file.listFiles(); // 获取文件夹集合
for (int i = 0; i < str.length; i++) {
System.out.println("======="+file.getName()+"======"); // 所在遍历的文件夹名称
test1(str[i].getPath());
}
}else {
System.err.println(file.getName()); // 如果是文件则打印输出
}
return "";
}
// 不使用递归遍历文件夹
public void test2(String url) {
File file = new File(url);
File[] listFile = file.listFiles();
for (int i = 0; i < listFile.length; i++) {
if(file.isDirectory()) { // 判断是否文件夹
File[] str = file.listFiles(); // 获取文件夹集合
for (int j = 0; j < str.length; j++) {
System.out.println("======="+file.getName()+"======"); // 所在遍历的文件夹名称
}
}else {
System.err.println(file.getName()); // 如果是文件则打印输出
}
}
}
public static void main(String[] args) {
Recursive r = new Recursive();
r.test1("D://KuGou");
}
}
从上述代码可以看得出,如果不使用递归遍历,我们很难把所有文件夹都遍历完毕