递归(递归方法):方法自己调自己
应用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); // 递归删除
}
}
}
}