Java递归优化的方法是什么
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Java递归优化的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java递归优化的方法是什么"吧!1.go to语法今天
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
互联网科技海报
亿人帮互联网科技有限公司
湖南永感互联网科技有限公司
互联网最新的科技有限公司
北京互联网科技
深圳互联网络科技有限公司
卓越科技(互联网 )
迪茉互联网科技
上海致骋互联网科技
四川狮子座互联网科技
中国的互联网科技企业的崛起
阿里互联网科技公司
武汉健翔互联网络科技有限公司
移动互联网年度科技创新
高科技互联网发展前景如何
华中科技大学互联网的牛人
雨阳互联网卡科技有限公司
富国互联网金融科技混合基金
北京品多多互联网科技有限公司
上海互联网科技园景观
美国互联网保险保险科技
鸠鸠互联网科技
亿策互联网科技
国外互联网科技网站
顺网科技2021年互联网排名
广州优美互联网科技
重庆互联网医院沙龙医盟信息科技
中天科技中国工业互联网
下一代互联网重大应用科技园
玉溪新华互联网科技怎么选