/*
* 递归:方法定义中调用方法本身的现象
*
* 方法的嵌套
* Math.max(Math.max(a,b),c)
*
* public void show(int n){
* if(n<=0){
* System.exit(0);
* }
* System.out.println(n);
* show(--n);
* }
*
* 注意事项:
* A:递归一定要有出口,否则就是死递归
* B: 递归的次数不能太多,否则内存溢出
* C:构造方法不允许递归调用
*/
案例1:
package com.digui.gz_02; /* * 请用代码实现求5的继承 * * 5!=1*2*3*4*5 * 5!=5*4! * * 循环实现 * 递归实现 * a:做递归要写一个方法 * b:出口条件 * c:规律 * * */ public class DiGuiDemo { public static void main(String[] args) { // int jc=1; // for(int i=2;i<=5;i++){ // jc*=i; // } System.out.println("5的阶乘是:"+JC(5)); } /* *做递归要写一个方法: * 返回值类型 int * 参数列表:int n * 出口条件: * if(n==1){return 1;} * 规律: * if(n!=1){return n*方法名(n-1);} * */ public static int JC(int n){ if(n==1){ return 1; }else{ return n*JC(n-1); } } }
案例2:
package com.digui.gz_02; /* * 有一对兔子,从出生后第三个月后起每一个月都生一对兔子,小兔子长到第三个月后又生一对兔子,假设兔子都不死,问每个月兔子对数为多少? * *学会推规则而不是心里臆测: *第一个月: 1 *第二个月: 1 *第三个月: 2 *第四个月: 3 *第五个月: 5 *第六个月: 8 *... *由此可见: * 1,1,2,3,5,6,... */ public class DiGuiDemo2 { public static void main(String[] args) { System.out.println(rabbitCount(20)); } /* * 返回值类型 int * 参数列表 int n * 出口条件(已知条件):第一个月和第二个月是1 * 规律:从第三个月开始兔子数是前两项之和 */ public static int rabbitCount(int time){ if(time<3){ return 1; }else{ return rabbitCount(time-1)+rabbitCount(time-2); } } }
案例3和4
package com.digui.gz_02; import java.io.File; //import java.util.ArrayList; /* * 递归遍历指定目录下的指定后缀文件 */ public class DiGuiDemo3 { // static ArrayList<File> fileArray=new ArrayList<File>(); public static void main(String[] args) { File file=new File("C:\Users\Administrator.PMIMP83HWNIKWOV\Desktop\suibianwanwan"); getFileClass(file); // System.out.println(fileArray.size()); // for(File f:fileArray){ //// System.out.println(f.getName()); // System.out.println(f.getAbsolutePath()); // } } /* * 返回值类型 void * 参数列表 文件夹File * 出口条件:文件,后缀名是.class * * */ public static void getFileClass(File file){ File[] files=file.listFiles(); for(File f:files){ if(f.isDirectory()){ getFileClass(f); }else{ if(f.getName().endsWith(".class")){ System.out.println(f.getAbsolutePath()); // fileArray.add(f); } } } } }
package com.digui.gz_02; import java.io.File; /* * 递归删除带内容的目录 */ public class DiGuiDemo4 { public static void main(String[] args) { File file=new File("C:\Users\Administrator.PMIMP83HWNIKWOV\Desktop\suibianwanwan"); removeFile(file); } public static void removeFile(File file){ File[] files=file.listFiles(); for(File f:files){ if(f.isFile()){ f.delete(); System.out.println("文件------"+f.getName()+"--------删除"); }else{ removeFile(f); } } System.out.println("文件夹------"+file.getName()+"--------删除"); file.delete(); } }