递归(递归方法):方法自己调自己
应用1:计算x的y次方,如2的5次方
// 计算x的y次方,如2的5次方
public static int calc(int x, int y) {if (y == 0) {return 1;}return x * calc(x, y-1); // y = 5 return 2 * calc(2, 4)// y = 4 return 2 * calc(2, 3)// y = 3 return 2 * calc(2, 2)// y = 2 return 2 * calc(2, 1)// y = 1 return 2 * calc(2, 0)// y = 0 return 1
}
// 注意:递归必须有退出条件,否则可能会出现死循环,此时会报栈溢出异常
应用2:递归获取目录下的所有文件,包括子目录下的文件
package code15_IO.test01_File;import java.io.File;/** 递归获取目录下的所有文件,包括子目录下的文件*/
public class Test04_递归获取目录下的文件 {public static void main(String[] args) {File file = new File("d:/resource");display(file);}public static void display(File file) {// 判断文件是否存在if (!file.exists()) {return;}// 判断是否为目录if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {if(f.isFile()){System.out.println(f.getAbsolutePath());}else{display(f);}}}else{System.out.println(file.getAbsolutePath());}}
}
应用3:删除指定目录下所有的空目录,包括子目录下的空目录
package code15_IO.test01_File;import java.io.File;/** 删除指定目录下所有的空目录,包括子目录下的空目录*/
public class 练习 {public static void main(String[] args) {File file = new File("d:/resource");remove(file);}public static void remove(File file) {// 判断是否为空目录if (file.isDirectory() && file.listFiles().length == 0) {file.delete();System.out.println("删除空目录:" + file.getAbsolutePath());// 删除当前目录后可能导致父目录也为空,所以需要对父目录进行处理remove(file.getParentFile());} else if (file.isDirectory()) {// 如果当前目录不为空目录,则获取目录下所有文件进行再处理File[] files = file.listFiles();for (File f : files) {remove(f); // 递归删除}}}
}