Java之递归算法的理解与Demo(包含return的坑)
2022/7/8 14:20:25
本文主要是介绍Java之递归算法的理解与Demo(包含return的坑),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在平时的工作或者面试中,大家一说到“递归”,我们会想到“自己调自己”,确实,程序调用自身的编程技巧称为递归(recursion)。但是在真正编写递归程序的时候一定要具备三个条件:
1.终结条件(满足边界条件时,停止调用自身)
2.递归条件(满足递归条件时,继续调用自身)
3.基本值(例如:下面demo中基本值就是最后一次调用自身时current的值)
public static void main(String[] args) { //递归 recursion(1,10); } private static String recursion(int current, int total) { if (current > total) {//终结条件 System.out.println("已经停止调用了!"); //返回值 return "已经停止调用了!"; } else {//递归条件(current <= total) System.out.println("第" + current + "次调用!"); //(坑)切记:此处一定要在方法前写上return!!! return recursion(++current, total);//current不断加1,调用自身 //基本值就是最后一次调用自身时current的值 } }
运行结果
递归其实就是使用if(){}else{}用return结束循环。使用递归能够用简短的代码完成需要多次重复的计算,大大减少了代码量,简而言之:用有限的语句定义对象的无限集合。但递归算法解题的运行效率较低。所以不提倡用递归设计程序。如果使用了递归一定要满足上述三个条件否则一不小心就进了死循环了~
下面来说代码中提到的“坑”------ return
避坑参考URL:https://blog.csdn.net/qq_35624642/article/details/54613886
场景描述:下图代码,我在递归方法里满足递归条件(current <= total)时,继续调用自身(recursion(++current,total)),在最后return,代码执行没有报错,但是发现System.out.println("我返回了")输出了11次!!!!!!后来发现,return的作用于是recursion这个方法,举例:当current=1的时候进recursion方法,此时走的是else里的代码,是继续调用了自己,并没有return。当current=2的时候进recursion方法,此时走的还是else里的代码,还是继续调用了自己,依然没有return......这样依次执行,当current=11的时候,走的是if(current > total)的代码,执行了“System.out.println("已经停止调用了!");” ,然后执行1次“return “返回值current=11”,但是此时对于current=10,current=9,current=8......时调用的recursion方法还都没有执行return,所以按照current=11.10.9.8......3.2的顺序又依次执行了10次“return '返回值current=11,10,9,8,7,6,5,4,3,2”,最后返回值current=2,明显返回值不是我们想要的,我们想要的返回值应该是“返回值current=11”。下图为错误代码示例:
错误代码示例:
为避免这个return的坑,我们使用递归的时候要按照“正确代码实例”的方式去编写代码。
正确代码示例:
来源:https://blog.csdn.net/Peacock__/article/details/88064442这篇关于Java之递归算法的理解与Demo(包含return的坑)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署