我学习递归是从 「归并排序」和「快速排序」开始的,尤其「归并排序」是学习「递归」和 「分治算法」的很好的学习材料。
- 每一个递归,都有「自顶向下」和「自底回顶」的过程,也就是所有相关参数要全部先入栈,然后再出栈,这样的一个过程,才完成了一个任务。
因此,它有「先进后出,后进先出」的过程。
下图是「归并排序」的理解过程。
图片来源:https://www.cnblogs.com/chengxiao/p/6194356.html
- 自顶向下就是「拆解问题」,再从底部往上走,在这里就可以做一点事情,这是递归非常神奇,而且一开始琢磨不透的地方。
可以从具体例子去想清楚,为什么递归方法能够帮助我们完成一件具体的任务,我觉得这个切入点是很好的,尤其是想清楚「归并排序」为什么可以完成排序任务。
还有就是「二叉树」和「链表」的问题 做多了,「递归」也就熟悉了哈。
总结:
- 多写代码 「归并排序」「二叉树」「链表」问题,写好「递归」的时候,顺便把「分治思想」一起搞定;
- 尽量在纸上画一下内存图,其实就是画一个栈,后进先出,好多人就是这么搞懂的。
我感觉后面应该精选一些例子。
参考资料:https://leetcode-cn.com/circle/article/koSrVI/