递归---Day29
2019-12-05 07:50:07来源:博客园 阅读 ()
递归---Day29
递归的概述
递归:指在当前方法内自己调用自己的方式叫做递归
递归的分类:
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 }
原文链接:https://www.cnblogs.com/hpcz190911/p/11986676.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:多线程浅谈
- 图解汉诺塔问题( Java 递归实现) 2020-03-23
- Java中尾递归 2020-03-22
- java递归调用 return的问题 2020-01-02
- java递归 2019-12-29
- 深究递归和迭代的区别、优缺点及实例对比 2019-12-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash