概念:在方法中又调用了方法自己的函数。
注:递归一定要有条件限定,保证递归能够停止下来,次数不要太多,否则会发生栈内存溢出。
理解思想很重要,总结下来方便自己看。
1. 1~n 相加求和
public class Demo07 {
public static void main(String[] args) {
int sum = sum(100);
System.out.println("sum = " + sum);
}
public static int sum(int n) {
//停止递归,并返回
if (n == 1) return 1;
return n + sum(n - 1);
}
}
2.1~n 相乘求积
public class Demo08 {
public static void main(String[] args) {
int sum = sum(10);
System.out.println("sum = " + sum);
}
public static int sum(int n) {
if (n == 1) return 1;
return n * sum(n - 1);
}
}
3.文件检索,搜索指定目录中所以.txt文件,包括子目录,孙目录以及所以目录。
public class Demo09 {
public static void main(String[] args) {
File file = new File("F:/study");
List<File> list = new ArrayList();
List<File> list_file = findTxtService(file, list);
System.out.println("list_file = " + list_file);
}
private static List<File> findTxtService(File file, List<File> list) {
//是否为目录
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
//判断是否是文件
if (f.isFile()) {
String name = f.getName();
String newName = name.toLowerCase();
boolean flag = newName.endsWith(".txt");
if (flag) {
//获取当前目录下所有txt文件
list.add(f);
System.out.println("txt文件:" + f);
}
}
//判断是目录
if (f.isDirectory()) {
//递归调用自身方法
findTxtService(f, list);
}
}
}
return list;
}
}
本文例子只是阐述递归的思想,理解它才能再开发中使用它。