递归
递归
在当前方法内调用的行为称之为递归
直接递归
当前方法内调用自身
间接递归
方法a调用方法b,方法b再调用方法c,方法c调用方法a
注意
1.在递归中,一定要有条件限定,保证递归可以停下来,否则栈内存溢出。
public static void main(String[] args) {
a();
//b(1);
}
private static void a(){
//没条件
System.out.println("a 方法");
a();
}
2.有了条件限定后,也要注意,递归次数不能太多,否则也会栈内存溢出
public static void main(String[] args) {
//a();
b(1);
}
privatestatic void b(int i){
//次数太多
System.out.println(i);
if (i==50000){
return;
}
b(++i);
}
3.构造方法、构造不能溢出。
累加案例
计算1-n的和
public static void main(String[] args) {
//1-5的和
int num=5;
int sum=getSum(num);
System.out.println(sum);
}
private static int getSum(int num) {
//递归算法实现
if (num==1){
return 1;
}
return num+getSum(num-1);
}
阶乘案例
public static void main(String[] args) {
//阶乘
int num=5;
int sum=getSum(num);
System.out.println(sum);
}
private static int getSum(int num) {
if (num==1)
return 1;
return num*getSum(num-1);
}
遍历文件和目录
public static void main(String[] args) {
//创建目录文件
File file=new File("D:\\javatri");
printDir(file);
}
private static void printDir(File file) {
//list() String[] listFiles() File[]
File[] files=file.listFiles();
for (File file1 : files) {
if (file1.isFile()){
System.out.println("文件名为:"+file1.getAbsolutePath());
}
else if (file1.isDirectory()){
System.out.println("目录名为:"+file1.getAbsolutePath());
printDir(file1);
}
}
}
查找指定格式文件
public static void main(String[] args) {
//创建目录文件
File file=new File("D:\\javasofttwo");
printDir(file);
}
private static void printDir(File file) {
//list() String[] listFiles() File[]
File[] files=file.listFiles();
for (File file1 : files) {
if (file1.isFile()&&file1.getName().endsWith(".java")){
System.out.println("文件名为:"+file1.getAbsolutePath());
}
else if (file1.isDirectory()){
printDir(file1);
}
}
}