Java基础案例一:递归算法
一、递归的思想
具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用自身的情况。另外这个解决问题的函数必须有明显的结束条件,
这样就不会产生无限递归的情况了。
二、递归的2个条件
- 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
- 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)
三、递归三要素
- 一定有一种可以退出程序的情况;
- 总是在尝试将一个问题化简到更小的规模
- 父问题与子问题不能有重叠的部分
四、案例
4.1、用递归把目录下所有的目录及文件全部显示出来
1 /** 2 * 递归案例:用递归把目录下所有的目录及文件全部显示出来 3 */ 4 @Test 5 public void test1() { 6 File file = new File("D:\\BaiduNetdiskDownload\\中国传统文学"); 7 listAllFile(file); 8 } 9 private void listAllFile(File file) { 10 File[] files = file.listFiles(); 11 if (files.length > 0) { 12 for (File f : files) { 13 if (f.isDirectory()) { 14 listAllFile(f); 15 System.out.println("目录名:" + f.getName()); 16 } else { 17 System.out.println("文件名:" + f.getName()); 18 } 19 } 20 } 21 }

4.2、求阶乘
1 /** 2 * 求阶乘 3 */ 4 public static void main(String[] args) throws Exception { 5 Scanner scanner = new Scanner(System.in); 6 System.out.print("请输入阶乘数:"); 7 int i = scanner.nextInt(); 8 System.out.println("您输入的阶乘数是:" + i); 9 int num = factorial(i); 10 System.out.println("结果:" + num); 11 } 12 public static int factorial(int i) throws Exception { 13 if (i <= 0) { 14 throw new Exception("请输入参数为大于0的正整数!"); 15 } else if (i == 1) { 16 return 1; 17 } else { 18 return i * factorial(i - 1); 19 } 20 }

4.3、斐波那契数列
1 /** 2 * 斐波那契数列 3 * 斐波那契数列的递推公式:Fib(n)=Fib(n-1)+Fib(n-2),指的是如下所示的数列: 4 * 1、1、2、3、5、8、13、21..... 5 */ 6 @Test 7 public void test2() throws Exception { 8 int result = fib(6); 9 System.out.println("result = " + result); 10 } 11 private int fib(int i) throws Exception { 12 if (i < 0) { 13 throw new Exception("参数不能为负!"); 14 } else if (i == 0 || i == 1) { 15 return i; 16 } else { 17 return fib(i - 1) + fib(i - 2); 18 } 19 }

参考:https://www.cnblogs.com/cainiao-chuanqi/p/11320972.html

浙公网安备 33010602011771号