递归
需要注意两个问题
1.方法调用一定要有出口
2.调用的次数不能过多
1 /* 2 需求:求1~5之间的和 3 假设:f(n)表示求n以内的和 4 f(1) = 1 5 f(2) = f(1) + 2 6 f(3) = f(2) + 3 7 f(4) = f(3) + 4 8 f(5) = f(4) + 5 9 ... 10 f(n) = f(n-1)+n 11 */ 12 public class DiguiDemo1 { 13 public static void main(String[] args) { 14 int sum = getSum(5); 15 System.out.println(sum); 16 } 17 18 //求n以内的和 19 public static int getSum(int n) { 20 if (n == 1) { 21 return 1; 22 } else { 23 return getSum(n - 1) + n; 24 } 25 } 26 }
1 /* 2 需求:求斐波那契数列中的第n个数是多少? 3 1 1 2 3 5 8 13 21 34 55.... 4 规律: 5 第一个数和第二个数都是1 6 从第三个数开始,每一个数字是前面两个数字之和 7 8 假设:f(n)表示数列中的第n个数的值 9 f(1) = 1 10 f(2) = 1 11 f(3) = f(1)+f(2) 12 f(4) = f(2)+f(3) 13 ... 14 f(n) = f(n-2)+f(n-1) 15 */ 16 public class DiguiDemo2 { 17 public static void main(String[] args) { 18 19 int num = getNum(10); 20 System.out.println(num); 21 } 22 23 //求斐波那契数列的第n个数 24 public static int getNum(int n) { 25 if(n==1 || n==2){ 26 return 1; 27 }else{ 28 return getNum(n-2) + getNum(n-1); 29 } 30 } 31 }
求阶乘
1 求1~10的阶乘,使用递归来做。 2 10!=10*9*8*7*6*5*4*3*2*1 3 /* 4 假设f(n)就表示求1~n之间乘积 5 f(1)=1; 6 f(2)=f(1)*2; 7 f(3)=f(2)*3; 8 f(4)=f(3)*4; 9 f(5)=f(4)*5; 10 ... 11 f(n)=f(n-1)+n; 12 */ 13 //getSum方法就表示求1~n的和 14 public static int getSum(int n){ 15 if(n==1){ 16 return 1; 17 }else{ 18 return getSum(n-1)*n; 19 } 20 }
文件夹的遍历
1 遍历指定目录下所有的.java文件(包括子目录的) 2 //遍历输出指定目录下所有的.java文件 3 public static void printJavaFile(File dir){ 4 if(dir.isDirctory()){ 5 //获取dir目录下所有的子文件和子目录 6 File[] files=dir.listFiles(); 7 for(File file:files){ 8 //如果file是文件 9 if(file.isFile()){ 10 //如果文件名是.java文件,就输出 11 if(file.getName().endsWith(".java")){ 12 System.out.println(file); 13 } 14 } 15 //如果file是目录 16 if(file.isDirectory()){ 17 //递归调用,继续获取file目录下所有的子文件和子目录 18 printJavaFile(file); 19 } 20 } 21 } 22 } 23 24 练习5:遍历指定目录下所有的.java文件(包括子目录的) 25 要求:使用文件过滤器来做 26 //遍历指定目录下所有的.java文件(包括子目录的) 27 28 public static void getJavaFile(File dir){ 29 //判断dir是否为目录 30 if(dir.isDirectory()){ 31 //过滤获取当前目录下所有的.java文件和子目录(文件过滤器) 32 File[] files = dir.listFiles(pathname -> { 33 if (pathname.getName().endsWith(".java") || pathname.isDirectory()) { 34 return true; 35 } 36 return false; 37 }); 38 39 //遍历files数组 40 for (File file : files) { 41 //如果是文件,直接输出(因为上面已经过滤了) 42 if(file.isFile()){ 43 System.out.println(file); 44 45 } 46 //如果是文件夹继续递归 47 else if(file.isDirectory()){ 48 getJavaFile(file); 49 } 50 } 51 } 52 } 53

浙公网安备 33010602011771号