Java递归优化的方法是什么
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"Java递归优化的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java递归优化的方法是什么"吧!1.go to语法今天
千家信息网最后更新 2025年12月02日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使用队列优化。
//创建一个队列Queen queue = 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安全错误
数据库的锁怎样保障安全
经典笑话下载软件开发
qq下载服务器异常
企业征信数据库
sql连接2个数据库
天津时代网络技术优势
我的世界 空岛服务器
关于网络安全主题的绘画作品
英国游戏软件开发大学
国家网络安全管理局
腾讯数据库分布式
小说内容是存数据库还是文本
辽宁pdu服务器电源生产公司
深圳通达网络技术有限公司
国内用什么app软件开发
佛山加时代网络技术有限公司
本服务器美国
程序员软件开发后的工作职责
网络安全硕士学校
电脑什么是数据库
安阳软件开发服务有限公司
软件开发商公司拖进度怎么办
通州ibm服务器回收行情价格
高级数据库技术2021
人人网数据库技术
软件开发一般遵循什么流程
金风科技风机软件开发
plsql数据库信息查看
有关网络安全的新颖题目
刀片服务器可承受温度
东旦软件开发有限公司