import java.io.File; /* 递归:1.就是程序方法调用方法本身的一种算法 2.递归一定要有程序出口,不然是无限制的循环,导致StackOverflowError 当堆栈溢出发生时抛出一个应用程序递归太深。 */ public class DiGuiDemo { public static void main(String[] args) { System.out.println("----不死神兔-----"); System.out.println(fB(8)); System.out.println("------求阶层--------"); System.out.println("f(10)!="+fn(10)); System.out.println("---------------遍历目录--------------------------------"); File file = new File("E:\\javaFileTest"); getAllFile(file); } /* 作用:遍历文件目录,是文件就输出文件的绝对路径,是目录,就在调用方法 参数:file 文件对象 返回值:void 程序出口:判断是否为文件,是,就输出路径,递归结束 */ public static void getAllFile(File file){ //获得给定目录下的所有文件和目录 File[] fileArray = file.listFiles(); if(fileArray!=null){ //判断数组是否为空 //遍历这个文件数组 for(File oneFile :fileArray){ boolean resultDir = oneFile.isDirectory(); if(resultDir){ getAllFile(oneFile); }else { //输出文件目录的绝对路径 String filePath = oneFile.getPath(); System.out.println(filePath); } } } } /* 求阶层:5!=5*4*3*2*1 f(n)=f(n)*f(n-1) 参数:要求的阶层数,返回结果,程序出口为:1!=1 */ public static int fn(int n){ if(n==1){ return 1; } return n*f(n-1); } public static int f(int n){ if(n==1||n==2){ return 1; }else { int sum = f(n-1)+f(n-2); return sum; } } /* 作用:本月的免子是前两个月的之和 参数:int i 传要计算第几个月的免子 返回值:int sum ;返回第N月的免子总数 */ public static int fB(int i){ if(i==1||i==2){ return 1; }else { int sum=fB(i-1)+fB(i-2); return sum; } } }
Java:递归学习
最新推荐文章于 2023-12-20 23:57:42 发布