看看 📂王道 2023 数据结构笔记 中的第五章树与二叉树

这里是一些网友总结:

一文看懂二叉树的概念和原理

二叉树三种遍历(动态图 + 代码深入理解)

递归的“递”

假如你在一个很长的队伍中,一眼望不到头,你想知道自己在队伍中的第几个,于是你问你前面的人,他是第几个。他也看不到头啊,他也只好问他前面的人“你是第几个啊”。这样一直问下去,直到问到队首的那个人。

一直到队首那个人(边界条件)之前,都在递问题,没有任何收获,只是一层层递下去。

递归的“归”

直到到了队首的那个人,他不用再问了,直接回答说“我是第一个”,那么第二个人在此基础上加1,告诉后面的人“我是第二个”以此类推,最后你就知道自己是第几个了。

直到边界条件,才开始归并答案。并且过程是这样的:

在边界条件的基础上,先解决队首第2个人的问题,在此基础上,再解决队首第3个人的问题… …以此类推,层层归并,直到你这里,归并完成。所有人都有了答案,虽然前面的人不一定想知道自己的位置,但是为了帮你解决问题,他们的问题必须要提前解决。

递归的归不归?

递出去的东西已定能收回来吗?当然不一定,比如你递出去1000千块,如果遇到老赖,肯定就收不回来了。也就是说,递出去的钱,归来的条件是:对方不是老赖。同样的,递出去一个工作,如果遇到不靠谱的人,那也就凶多吉少了。

你看,递个钱,咱们总是牢记边界条件。递个归,咋就老忘呢

不要在意细节

这里说的细节,是递归里的细节。细节是魔鬼,如果你硬要死磕,很可能把自己递进去。

递归是重复、枯燥的事,计算机很擅长这个工作,如果你想让自己的人脑走一遍,是不明智的。因此有人把递归比作外包,把活外包出去了,就别再自己折腾啦。

就像开头问自己排第几个的例子,如果你硬要跟着前面前面的人,看他们一个个具体怎么遣词造句,怎么跟前面的人勾搭的,那还不把自己累死。正确的做法是,已经将问题外包出去了,接下来玩手机不香吗,等着答案归来就行。

分解问题是否这样理解? — 层层外包

不需要考虑全局,只需考虑下一步,分割子问题: 我只需知道前面一个人的位置,就知道我自己的位置了,把这个问题外包给前面的一个人即可,以此类推

参考:

终于弄懂算法中递归的执行过程 - 腾讯云开发者社区 - 腾讯云

递归函数工作原理 - CSDN 博客