定义
方法直接调用自己或者间接调用自己的形式称为方法递归
间接递归:就是方法调用其他方法,其他方法又回调方法自己
**递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出现象 **
一个简简单单的n的阶乘
public class Test {
public static void main(String[] args) {
int a = 10;
System.out.println(JieCheng(a));
}
private static int JieCheng(int a) {
if (a==1){
return 1;
}
return a*JieCheng(a-1);
}
}
因此,递归有三要素:
非规律化递归问题
文件搜索
递归实现文件夹查找具体文件
public class Test {
public static void main(String[] args) {
File file = new File("E:\\NWPU VHR-10\\UCAS_AOD");
System.out.println(file.getName());
searchFile(file,"P0001.png");
}
public static void searchFile(File file,String fileName){
File[] files = file.listFiles();
for (File file1:files){
if (file1.isDirectory()&&file1.list().length==0){
break;
}
if (file1.isDirectory()){
searchFile(file1,fileName);
}else if (file1.isFile()){
if (fileName.equals(file1.getName().split("\\\\")[file1.getName().split("\\\\").length-1])){
System.out.println("找到了此文件"+file1.getAbsolutePath());
return;
}
}
}
}
}
啤酒问题
public class Beer {
public static int beerNumb;
public static int bottleCap;
public static int bottle;
public static void main(String[] args) {
buy(10);
System.out.println(beerNumb+" "+bottleCap+ " "+bottle);
}
public static void buy(int money){
beerNumb = money/2;
bottleCap = money/2;
bottle = money/2;
exchange2(bottle);
exchange4(bottleCap);
}
public static void exchange4(int numb4){
if (numb4<4){
return;
}
beerNumb= beerNumb+numb4/4;
bottle = bottle+numb4/4;
bottleCap = bottleCap - 4*(numb4/4)+numb4/4;
exchange2(bottle);
exchange4(bottleCap);
}
public static void exchange2(int numb2){
if (numb2<2){
return;
}
beerNumb= beerNumb+numb2/2;
bottleCap = bottleCap+numb2/2;
bottle = bottle-2*(numb2/2)+numb2/2;
exchange2(bottle);
exchange4(bottleCap);
}
}