先放一个B站视频链接看过之后相信很多人会有跟我一样的感觉:递归解释
所谓递归,网上有很多人进行解释,大部分都是这样写的:自己调用自身,本质就是将规模较大的问题化成结构相同但规模较小的问题。即大事化小,小事化了。为了避免死循环,要设一个结束条件,不能无限划分下去,最后再一层一层返回所有未操作步骤,简单来说就是将大的分解成小的,再由小的还原成大的,很多人说递归的本质是栈,毕竟栈是先入后出的原则,大的先放进去,小的后放进去(一层一层分解),最后是小的先弹出(还原)但其实我觉得不完全准确,递归的本质更像是栈跟链表的结合,这个灵感来源于B站上一个视频:
如图:
题目就是求一个二叉树的最大深度,假如我们把每一个节点要执行的所有步骤分成1,2,3,4,那么每个节点的步骤分为四个小方格组合成一个链表的结点,如此当结点判断不是终止结点后,继续调用自身函数指向下一个结点如此到最后终止NULL,然后返回上一步执行该结点剩余所有步骤,在一层一层return上一个结点继续执行剩余步骤再return上一个结点,如此往复,这样看的话是不是有点像双向链表,但是和链表又不完全一样,是栈的思想和链表的思想结合。