递归---Day29
程序员文章站
2023-11-02 15:48:52
递归的概述 递归:指在当前方法内自己调用自己的方式叫做递归 递归的分类: 1.直接递归称为方法自身调用自己。 2.间接递归可以用A方法调用B方法,用B方法调用C方法,用C方法调用A方法。 递归的注意事项 递归一定要有限定条件,保证递归能够停止下来,否则会出现死循环,导致发生栈内存溢出。 在递归中虽然 ......
递归的概述
递归:指在当前方法内自己调用自己的方式叫做递归
递归的分类:
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 }