我学习递归是从 「归并排序」和「快速排序」开始的,尤其「归并排序」是学习「递归」和 「分治算法」的很好的学习材料。

  • 每一个递归,都有「自顶向下」和「自底回顶」的过程,也就是所有相关参数要全部先入栈,然后再出栈,这样的一个过程,才完成了一个任务。
    因此,它有「先进后出,后进先出」的过程。

下图是「归并排序」的理解过程。
浅谈「递归」(草稿)
图片来源:https://www.cnblogs.com/chengxiao/p/6194356.html

  • 自顶向下就是「拆解问题」,再从底部往上走,在这里就可以做一点事情,这是递归非常神奇,而且一开始琢磨不透的地方

可以从具体例子去想清楚,为什么递归方法能够帮助我们完成一件具体的任务,我觉得这个切入点是很好的,尤其是想清楚「归并排序」为什么可以完成排序任务。

还有就是「二叉树」和「链表」的问题 做多了,「递归」也就熟悉了哈。

总结:

  • 多写代码 「归并排序」「二叉树」「链表」问题,写好「递归」的时候,顺便把「分治思想」一起搞定;
  • 尽量在纸上画一下内存图,其实就是画一个栈,后进先出,好多人就是这么搞懂的。

我感觉后面应该精选一些例子。

参考资料:https://leetcode-cn.com/circle/article/koSrVI/

相关文章: