直接递归称为方法自身调用自己
间接递归可以A方法调用B方法,B方法调用方法,C方法调用A方法。
注意事项:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出。
构造方法,禁止递归。
假如有方法A,没有限制,不断的递归A方法,那么分配的栈内存中就有无数个A方法,最终导致栈内存溢出。构造方法中不可以递归,因为构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错。
用递归方法求1-100的和
public class Demo01{
public static void main(String[] args) {
System.out.println(get(100));
}
public static int get(int n) {
if (n == 1) {
return 1;
}
return n + get(n - 1);
}
}
用递归求n的阶乘
public class Demo01{
public static void main(string[] args){
}
public int get(int n){
if(n==1){
return 1;
}
return n*get(n-1);
}
}
波菲纳妾数列
public class Demo01{
public static void main(string[] args){
}
public int get(int n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
return get(n-1)+get(n-2)
}
}
public class Lx1 {
public static void main(String[] args) {
//创建目标对象文件
File f=new File("F:\\java0803\\date01");
//利用匿名内部类创建对象
FileFilter ff=new FileFilter() {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".java");
}
};
//建立file数组,遍历date01下的文件
File[] files=f.listFiles(ff);
for(File file:files){
System.out.println(file);
}
}
}
public class Lx1 {
public static void main(String[] args) {
//创建目标对象文件
File f=new File("F:\\java0803\\date01");
//利用匿名内部类创建对象
FileFilter ff=new FileFilter() {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".java");
}
};
//建立file数组,遍历date01下的文件
File[] files=f.listFiles(ff);
for(File file:files){
System.out.println(file);
}
}
}
遍历java0803下的java文件
public class Lx01 {
public static void main(String[] args) {
//创建目标文件
File file=new File("F:\\java0803");
//调用get方法
get(file);
}
public static void get(File file){
//打印文件夹
System.out.println("====="+file+"====");
//创建file数组,并判定规则
File[] files=file.listFiles(new Myfilefiller());
//遍历file数组
for(File f:files){
//判断是文件夹,是在调用get()方法
if(f.isDirectory()){
get(f);
}else{
System.out.println(f);
}
}
}
}