首先我们说一下递归和循环的区别吧
相同点:他们都是通过循环来达到想要的结果,都是通过一个条件作为出口,没有出口就会死循环
不同点:循环只是方法内的一个循环体而已,递归则是一个方法,方法自己调用自己的方法。
说到这里是不是想问,既然有循环干嘛还需要递归呢?
其实这个问题也很好理解,通常我们递归用到的最多的是循环目录结构,树结构的目录都会用到递归,用循环很难实现,话不多说我们直接上代码。
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"); } }
从上述代码可以看得出,如果不使用递归遍历,我们很难把所有文件夹都遍历完毕