递归思想
特点:
1. 在函数内调用函数本身
2. 递归必须要有方法的出口(如果是void,可以没有return,如果用到了for循环,那么for循环的控制次数会使方法有出口,如果是有特定的返回值类型,必须要有出口,携带一个返回值)
3. 递归的次数不能太大,因为调用方法时,方法入栈,在递归过程中,前面进去的方法一直在等待再次调用它本身,直到有出口时才会执行完方法出栈,所以在不断调用本身时,方法不断入栈,而没有出栈,栈内存空间较小,如果递归次数太多,会导致栈内存溢出。
代码示例:
packagefile;
publicclass Lianxi8 {
public static void main(String[] args) {
//test();
System.out.println(sum(10));
System.out.println(fei(11));
System.out.println(jicheng(6));
}
/*static int num;
public static void test(){
num++;
if(num == 100000){//递归次数太大,栈内存溢出 Exception in thread"main" java.lang.StackOverflowError
return;
}
test();
System.out.println(num);
} */
//递归思想求1-10的和
public static int sum(int n){
if(n == 1){
return 1;
}
return n+sum(n-1);
}
//斐波那契数列
public static int fei(int m){//传入数列项数
if(m == 1 || m == 2){
return 1;
}
return fei(m-2)+fei(m-1);
}
//递归思想求n!
public static int jicheng(int n){
if(n == 1)
return 1;
return n*jicheng(n-1);
}
}
递归删除指定目录下的文件和文件夹:
package file;
import java.io.File;
import java.util.Arrays;
public class Lianxi10 {
public static voidmain(String[] args) {
//递归删除文件和文件夹
File f = newFile("C:\\Users\\Administrator\\workspace\\Work1");
del(f);
}
public static voiddel(File f){
File [] fs =f.listFiles();//获取指定目录下的文件和文件夹对象
for(int i =0;i<fs.length;i++){//遍历对象数组
if(fs[i].isFile()){//如果是文件
fs[i].delete();//可以删除
}else{//否则,说明是文件夹
del(fs[i]);//递归继续删除文件夹下的文件
}
}//for循环结束后,剩下的都是没有内容的文件夹,可以删除
for(int i =0;i<fs.length;i++){
fs[i].delete();
}
}
}