递归---Day29

2022-10-12,

递归概述

  递归:指在当前方法内自己调用自己的方式叫做递归

递归的分类:

  1.直接递归称为方法自身调用自己。

  2.间接递归可以用a方法调用b方法,用b方法调用c方法,用c方法调用a方法。 

递归的注意事项

  递归一定要有限定条件,保证递归能够停止下来,否则会出现死循环,导致发生栈内存溢出。 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。   构造方法,禁止递归

 1 package demosummary.recursive;
 2 
 3 public class recursivedemo1 {
 4     public static void main(string[] args) {
 5         //调用a方法
 6         a(1);
 7         //调用b方法
 8         b();
 9     }
10 
11     private static void a(int i) {
12         system.out.println(i);
13         //添加一个条件避免发生内存溢出现象
14         if (i == 10) {
15             return;
16         }
17         a(++i);
18     }
19 
20     //没有限制条件,会发生内存溢出现象
21     private static void b() {
22         system.out.println("b方法");
23         b();
24     }
25 }

递归累加求和

 1 package demosummary.recursive;
 2 
 3 /**
 4  * 计算1~n的和
 5  * 分析:
 6  *    num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用
 7  */
 8 public class recursivesum {
 9     public static void main(string[] args) {
10         int sum = getsum(5);
11         system.out.println(sum);
12     }
13 
14     private static int getsum(int num) {
15         if (num == 1) {
16             return 1;
17         }
18         return num+getsum(num -1);
19     }
20 }

递归求阶乘(同求和一样解法)

 1 package demosummary.recursive;
 2 
 3 public class recursivefactorial {
 4     public static void main(string[] args) {
 5         int sum = getsum(5);
 6         system.out.println(sum);
 7     }
 8 
 9     private static int getsum(int num) {
10         //当num=1时,停止递归,防止发生内存溢出现象
11         if (num == 1) {
12             return 1;
13         }
14         return num * getsum(num - 1);
15     }
16 }

递归打印多级目录

 1 package demosummary.recursive;
 2 
 3 import java.io.file;
 4 
 5 public class recursiveprintdir {
 6     public static void main(string[] args) {
 7         //创建file对象
 8         file file = new file(".//filter");
 9         //调用打印方法
10         printdir(file);
11     }
12 
13     private static void printdir(file dir) {
14         //获取目录的集合
15         file[] files = dir.listfiles();
16         //循环打印目录
17         for (file file : files) {
18             if (file.isfile()) {//判断是否为文件
19                 system.out.println("文件的路径:" + file.getabsolutepath());
20             } else {//判断是否为目录
21                 system.out.println("目录的路径:" + file.getabsolutepath());
22                 //是目录则继续往下打印
23                 printdir(file);
24             }
25         }
26     }
27 }

 

《递归---Day29.doc》

下载本文的Word格式文档,以方便收藏与打印。