Java递归优化的方法是什么
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要讲解了"Java递归优化的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java递归优化的方法是什么"吧!1.go to语法今天
千家信息网最后更新 2025年02月03日Java递归优化的方法是什么
这篇文章主要讲解了"Java递归优化的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java递归优化的方法是什么"吧!
1.go to语法
今天偶然看到ThreadPoolExecutor的addworker方法用到了go to,他到底是个优雅高级语法,还是个混淆语法。
public static void main(String[] args) { for (int i = 0; i <2; i++) { for (int j = 0; j < 5; j++) { System.out.println(j); if(j==3){ break; } } } System.out.println("=================="); retry: for (int i = 0; i <2; i++) { for (int j = 0; j < 5; j++) { System.out.println(j); if(j==3){ break retry; } } } }
普通的break跳出了当前for循环,但没有结束外层循环
retry 标识此处循环跳出,标识位在外层循环外面,跳出外循环。
2.递归优化
递归算法空间复杂度:递归深度n*每次递归所要的辅助空间,如果每次递归所需要的辅助空间为常数,则递归空间复杂度o(n)。
优化前
public Long filterOrg(Long orgId) { CountVo vo= gMapper.queryOrId(orgId); if(vo==null){ return orgId; }else if(1==vo.getPid()){ return orgId; }else{ return filterOrg(vo.getPid()); }
业务逻辑不考虑pid为null情况
参数传入之前写在lambada表达式中没有判空
这个if看着贼烦
N级节点递归层次太深
优化
public Long filterOrg(Long orgId) { if (orgId == 1) return orgId; Long serachId = orgId; for (; ;) { CountVo vo = this.queryOrgId(serachId); if(vo==null||vo.getPid()==1)return orgId; serachId=vo.getPid(); } }
然后kk不知廉耻的写上了一段注释,深藏功与名
/** * 功能描述: 舍弃递归,复杂度降低,避免栈溢出 * @Param: [orgId] * @Return: java.lang.Long * @Author: kk */
看着这个多层if就想起被千行foreach+if支配的恐惧,必须干掉他,写到这竟然笑出了声,可能这就是菜鸡成长的喜悦吧。
尾递归
函数调用自身,称为递归。如果尾调用自身,就称为尾递归。递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生"栈溢出"错误(stack overflow)。但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生"栈溢出"错误。这个优化厉害了
function factorial(n, total) { if (n === 1) return total; return factorial(n - 1, n * total);} factorial(5, 1) // 120
尾递归优化
function Fibonacci2 (n , ac1 = 1 , ac2 = 1) { if( n <= 1 ) {return ac2}; return Fibonacci2 (n - 1, ac2, ac1 + ac2);} Fibonacci2(100) // 573147844013817200000Fibonacci2(1000) // 7.0330367711422765e+208Fibonacci2(10000) // Infinityhttps://blog.csdn.net/qq_37818095/article/details/81944809
虽然这是js的
用队列优化递归
public void getFile(File file){ if(file.isDirectory()){//如果是目录 File[] files = file.listFiles(); for(int i=0;i使用队列优化。
//创建一个队列Queenqueue = new LinkedList ();queue.offer(file);while(!queue.isEmpty()){//如果队列不为空File file = queue.poll();if(file.isDirectory()){//从队列中获取一个FileFile[] files = file.listFiles();//是目录,将目录下所有文件遍历出来,存储到队列中for(int i =0;i
}
感谢各位的阅读,以上就是"Java递归优化的方法是什么"的内容了,经过本文的学习后,相信大家对Java递归优化的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
递归
队列
方法
循环
空间
复杂
复杂度
文件
目录
语法
学习
内容
就是
情况
标识
错误
j++
辅助
输出
普通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法中的网络怎么
计算机网络技术认证书
电脑服务器游戏大全
网络安全签到问题
怎么在数据库中输入信息
压缩git数据库拉取远程分支
人大复印报刊资料数据库中标公示
二手服务器多少钱一台
软件开发线索
从steam直接进方舟服务器
历代数据库
正规的ip代理服务器
国家网络安全宣传周科普短片
安卓软件开发一般用什么
中美印网络安全
文明重启什么服务器有徽章
lua游戏开发服务器
原始传奇qq服务器
到底谁才是中国服务器之王
软件开发入门学习视频
烟台软件开发哪家好
国际数据库有玻璃陨石吗
分宜租房网络安全
江西省中职技能竞赛网络安全
矢量数据库的单文件
共轨之家数据库
成都软件开发java
软件开发旅游网站模块流程图
网络安全心得体会250
东风村租房软件开发