递去是什么意思?递去其实就是发现了问题规模还可以再缩小,以相同的解决思路去求出最小的解。递去就是调用递归方法,程序没有直接往下执行,而是先走递归方法。但是没有走的剩下程序它还是会走的,一般除非程序走到了尽头结束了或者抛异常了才不会再执行。

归来是什么意思?归来就是调用递归方法求到解了,递归无法再进行下去了,程序就会回到调用递归方法处,继续走下面的语句,直到走完整个程序。

Controller

    @GetMappingpublic TagTree list() {TagTree root = new TagTree();root.setTagId(0L);root.setTagName("ceam");List<SystemTagDef> list = this.tagDefJpa.findAll();this.child(root, list);return root;}
child(TagTree root, List<SystemTagDef> allTags)
    private void child(TagTree root, List<SystemTagDef> allTags) {// 从allTags中取出对应子标签List<SystemTagDef> childs = allTags.stream().filter(item ->root.getTagId().equals(item.getParentId())).collect(Collectors.toList());allTags.removeAll(childs);// 注意forEach本身就是有终止条件的,即遍历到最后一个元素childs.forEach(item -> {TagTree tag = new TagTree();tag.setTagId(item.getTagId());tag.setTagName(item.getTagName());tag.setParentId(item.getParentId());// 递归调用this.child(tag , allTags);root.appendChildren(tag);});}

表数据(共7条)

我们重点看看child方法数据变化

1、

root allTags remove后的allTags childs 第二个item tag
ceam 7条数据 5条数据(可可、丫丫、柚柚、微微、贝贝) 2条数据(一级标签、CeaM) 一级标签 一级标签

2、调用this.child(tag , allTags);传入参数值为"一级标签对象",(可可、丫丫、柚柚、微微、贝贝)

root allTags remove后的allTags childs 第二个item tag
一级标签 5条数据(可可、丫丫、柚柚、微微、贝贝) 柚柚、微微、贝贝 可可、丫丫 可可 可可

3、调用this.child(tag , allTags);传入参数值为"可可对象",(柚柚、微微、贝贝)

root allTags remove后的allTags childs 第二个item tag
可可 柚柚、微微、贝贝 柚柚、微微、贝贝 1 贝贝 贝贝

4、调用this.child(tag , allTags);传入参数值为"贝贝对象",(柚柚、微微)

root allTags remove后的allTags childs 第二个item tag
贝贝 2条数据(柚柚、微微) 柚柚、微微 0 0 0

由于childs为0,即无子项item再不会递归调用,于是回到执行this.child(tag , allTags);下面语句

root.appendChildren(tag);

再执行步骤4前数据场景是3,即root为"可可对象",tag为贝贝。于是将贝贝添加到一级标签

5、  添加贝贝后回到3继续走foreach发现没有item,于是回到2处走下面语句,将可可添加到一级

root.appendChildren(tag);
root allTags remove后的allTags childs 第二个item tag
一级标签 2条(柚柚、微微) 可可 可可

6、添加可可后继续走foreach,item为丫丫

root allTags remove后的allTags childs 第二个item tag
一级标签 (柚柚、微微) 丫丫 丫丫

7、调用this.child(tag , allTags);传入参数值为"丫丫对象",(柚柚、微微)

root allTags remove后的allTags childs 第二个item tag
丫丫 (柚柚、微微)   (柚柚、微微)   0 0 0

由于childs为0,即无子项item再不会递归调用,于是回到执行this.child(tag , allTags);下面语句

root.appendChildren(tag);

再执行步骤7前数据场景是6,即root为"一级标签对象",tag为丫丫。于是将丫丫添加到一级标签

8、添加丫丫后发现一级标签没有item于是结束一级标签遍历回到1执行未走的程序

root.appendChildren(tag);
root allTags remove后的allTags childs 第二个item tag
ceam (柚柚、微微) 一级标签 一级标签

9、将一级标签添加到跟ceam继续forEach遍历item为CeaM

root allTags remove后的allTags childs 第二个item tag
ceam (柚柚、微微) CeaM CeaM

10、调用this.child(tag , allTags);传入参数值为"CeaM对象",(柚柚、微微)

root allTags remove后的allTags childs 第二个item tag
CeaM (柚柚、微微) 0 (柚柚、微微) 柚柚 柚柚

11、走forEach,调用this.child(tag , allTags);传入参数值为"柚柚对象"

root allTags remove后的allTags childs 第二个item tag
柚柚 0 0 0

12、发现"柚柚对象"无法走forEach,于是回到10走未走完的程序

root allTags remove后的allTags childs 第二个item tag
CeaM 0 柚柚 柚柚
root.appendChildren(tag);

13、将柚柚添加到CeaM,继续走forEach

root allTags remove后的allTags childs 第二个item tag
CeaM 0 微微 微微

14、调用this.child(tag , allTags);传入参数值为"微微对象"

root allTags remove后的allTags childs 第二个item tag
微微 0 0 0 0 0

15、发现"柚柚对象"无法走forEach,于是回到14走未走完的程序

root allTags remove后的allTags childs 第二个item tag
CeaM 0 微微 微微
root.appendChildren(tag);

16、将微微添加到CeaM后,发现CeaM没有item于是结束CeaM遍历回到9执行未走的程序

root allTags remove后的allTags childs 第二个item tag
ceam 0 CeaM CeaM
root.appendChildren(tag);

将CeaM添加到ceam后forEach遍历结束,整个程序走完。

递去了怎么还归来了呢相关推荐

  1. 19岁少年震惊科技界,被NASA邀去工作,还见奥巴马!

    19岁少年震惊科技界,被NASA邀去工作,还见奥巴马! 他为7岁小女孩, 装上了隐形的翅膀. ··· 科技鬼才 Technical Genius 他才19岁, 便用一项发明震惊科技界. Easton ...

  2. 居家办公竟比去公司上班还累?

    hello,大家好,我是张张,「架构精进之路」公号作者. 随着疫情管控的逐步升级,今年上半年相信大部分同学都经历了居家办公的情况,就我自己而言,就有将近2个月的时间是采取的居家办公模式的. 一提到居家 ...

  3. 现在想读博以后去高校,还值得吗?

    每天给你送来NLP技术干货! 本文来源:学术志(ID:xueshuzhi001)综合整理自知乎.小红书等 在2022年学位与研究生教育发表的论文<我国博士毕业生去向及就业特征分析--基于2015 ...

  4. html超链接去虾线,还在用牙签、剪刀去虾线?教大家一招,一秒一个!

    虾,是大自然馈赠的至鲜滋味. 国人酷爱吃虾,也善于烹虾. 清蒸.白灼.蒜蓉.红烧. 油焖.炸-- 随你喜欢怎么吃就怎么吃!!! 此外,虾种类繁多, 还能带来不同的味觉体验. 江虾鲜美.河虾嫩滑.湖虾鲜 ...

  5. 我进不去大厂,还不是因为没搞懂它!

    我出去面试开场白过后,面试官经常问我一个看似简单的问题:浏览器打开一个网站,都经历了什么?后面基本都是围绕这个问题聊 HTTP 协议,我总是答不出一个满分的答案.直到我遇到了 Nginx/OpenRe ...

  6. 如何去找一些还没有完全上市的 在私募投资的公司 D轮左右 财经媒体

  7. 十一黄金周出游,去哪里人少还便宜?

    单位 :)

  8. syntax error near unexpected token 脚本报错误解决【转】

    第一种方法失败了,win的文本自带^M的确是问题 原创 syntax error near unexpected token 脚本报错误解决 2018-03-14 21:25:53 會飛的土豆 阅读数 ...

  9. 一个生物专业学生的内心独白:我为什么能去互联网大厂?能解剖兔子,手焊PCB,调试FPGA,还能手撕LRU!

    这回,考虑到近期关注了许多新朋友,并且大多都是学生党,可能对我还不是特别熟悉.因此我决定重新把我从非科班如何通过自学(狗屎运)进入大厂的经历分享出来,希望能够给予一些将要面临秋招,或者将要准备进入互联 ...

最新文章

  1. 网页鼠标滚动实现图片缩放
  2. 如何快速阅读一篇英文文献
  3. 减小Delphi的Exe文件大小
  4. Linux的apache的allowoverwrite参数的解释
  5. linux指令快速复制粘贴[龟速更新中]
  6. linux iopen i2c dev,i2c-dev - Linux驱动子系统之I2C_Linux编程_Linux公社-Linux系统门户网站...
  7. linux学习第九天 (Linux就该这么学)
  8. 迷你星域冒险服务器维护中,迷你世界星域冒险
  9. Bootstrap学习(一)
  10. [Windows] 集福宝- 支付宝 集福神器 2019
  11. 卫星地图上,深圳梧桐山这一条白线是什么
  12. 交换机配置snmp及查看snmp配置信息
  13. HR常用的人力资源系统软件有哪些?
  14. win7系统音响没有声音的解决设置方法
  15. Android:通过systrace进行性能分析及使用-详细
  16. 电子科技大学计算机科学与技术考研复试,电子科技大学计算机科学与工程学院2021考研招生复试工作安排...
  17. 安装 Mongrel
  18. 协众信息技术平面设计的8种类型
  19. 粒子动画,做礼物,雪花等特效
  20. 王者的世界:全球十大对冲基金公司传奇

热门文章

  1. 【Web安全】点击劫持 Click Jacking
  2. 安卓开发之apk自动安装代码
  3. nginx配置错误页面,处理tomat版本号泄露问题
  4. Python项目实战开发最全案例,涵盖8个开发方向
  5. 解决Ubuntu20.04网络图标消失
  6. 疫情过后,雨过天晴(复工指南)
  7. C语言随机点名器程序
  8. SHA256加密-loadrunner登录加密
  9. spss 自动线性建模
  10. 深圳市七娘山登山攻略(深圳市第二峰) 2019.8.31