Java递归优化的方法是什么
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要讲解了"Java递归优化的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java递归优化的方法是什么"吧!1.go to语法今天
千家信息网最后更新 2024年11月23日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安全错误
数据库的锁怎样保障安全
保定豆荚网络技术有限公司
电脑软件开发费用
dora服务器
企业网络安全自查报告
全球最大网络安全企业
有效的信息网络安全学习心得
数据通讯与网络技术考试题
黟县锐拓网络技术服务有限公司
服务器3206
严守网络安全守住保密底线讨论
青少年网络安全读后感
软件开发合同 国标
sql从数据库查询某个字段
万稷网络技术有限公司
系统升级服务器异常是咋回事
广州荔枝网络技术有限公
网络安全宣传日新闻稿
软件开发电脑需要什么样的配置
网络技术 岗位
服务器505错误
维护网络安全的部门电话
杭州工企危服网络技术招聘
网络安全 三要素aaa
服务器托管论坛
软件开发银行系统安全
企业网络安全自查报告
光电缆网络技术支撑服务维护
出入境管理局数据库在库人员
网络安全管理员招聘条件
国威电子科技互联网