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

 

posted @ 2022-01-05 14:51  谁怕?一蓑烟雨任平生  阅读(95)  评论(0)    收藏  举报