所有能用递归解决的问题,循环都能解决,但是当解决复杂问题,递归的实现方式会更简单.
递归计算5!(5 * 4 *3 * 2 * 1)
//例如:计算5!(5*4*3*2*1)
//循环写法
public static int factorial01(int n) {
int sum = 1;
for (int i = 2; i <= n; i++) {
sum *= i;
}
return sum;
}
//递归写法
public static int factorial02(int m) {
//递归出口,m=1时结束递归
if (m == 1) {
return 1;
}
int i = m * factorial02(m - 1);
return i;
}
递归遍历文件夹及文件
/**
* 递归遍历文件夹及文件的绝对路径
* @param file 文件夹
*/
public static void listDir(File file) {
System.out.println("文件夹" + file.getAbsolutePath());
//遍历文件夹
File[] files = file.listFiles();
//文件夹不为空
if (files != null && files.length > 0) {
//遍历
for (File file1 : files) {
//如果还有子文件夹
if (file1.isDirectory()) {
//递归调用
listDir(file1);
} else {//没有子文件夹,就是文件
//获取文件绝对路径
String absolutePath = file1.getAbsolutePath();
System.out.println("文件:" + absolutePath);
}
}
}
}
//调用递归方法
File file = new File("D:\\var");
listDir(file);
递归删除文件夹及文件
/**
* 递归删除文件夹及文件
* @param file 文件夹
*/
public static void deleteDir(File file) {
//遍历文件夹
File[] files = file.listFiles();
//删除文件
if (files!=null && files.length>0){
for (File file1 : files) {
if (file1.isDirectory()){
//递归删除
deleteDir(file1);
}else {
//删除文件
file1.delete();
System.out.println("删除文件:"+file1.getAbsolutePath());
}
}
}
//删除文件夹
file.delete();
System.out.println("删除文件夹:"+file.getAbsolutePath());
}
//调用递归方法
File file = new File("D:\\var");
deleteDir(file);