递归定义
在方法中调用方法本身
public static void main(String[] args) {
long f = f(5);
System.out.println(f);
}
public static long f(int n){
if(n==1){
return 1;
}
return n*f(n-1);
}
注意: 我们在适用递归过程中一定要保证递归能结束,不能无限递归下去,不然会出现栈溢出情况(StackOverflowError)。如果一个问题既可以用递归又可以用循环解决时,用循环解决问题。
练习
/*
练习1:不死兔
有一对兔子,从出生后第三个月气每个月生一对兔子,
小兔子长到第三个月后又开始生一对兔子,
加入兔子都不死,问第十二个月兔子的对数为多少?
1 1 2 3 5 8 13 21......
第三个月起 f(n)=f(n-1)+f(n-2) n表示月份
*/
public static long f1(int n){
if(n<=2){
return 1;
}
return f1(n-1)+f1(n-2);
}
/*
练习2:
递归删除一个文件夹,因为删除的文件夹必须是空的
需要先遍历问价夹内文件并且删除后,才能删除文件夹
文件内如果存在文件夹,需要递归解决
*/
public static void dirDelete(String path){
File dir = new File(path);
if(dir.exists()&&dir.isDirectory()){ //如果文件存在且是一个文件夹
File[] files = dir.listFiles();
for (File file : files) {
if(file.isFile()){
file.delete();
}else{
dirDelete(file.getAbsolutePath());
}
}
dir.delete();
}
}
/*
练习3:
递归求文件夹大小
需要遍历文件夹内文件大小,文件夹内如果出现文件夹
需要用到递归
*/
public static long f3(String path){
long size = 0;
File dir = new File(path);
if(dir.exists()&&dir.isDirectory()){
File[] files = dir.listFiles();
for (File file : files) {
if(file.isFile()){
size +=file.length();
}else {
size +=f3(file.getAbsolutePath());
}
}
}
return size;
}

被折叠的 条评论
为什么被折叠?



