# 第 4 节 自顶向下与自底向上
如果我们能够把「自顶向下」和「自底向上」理解清楚了,能更好地理解递归。
「递推」是从「问题边界」开始的正向推导,「递归」是从原问题开始到「问题边界」的反向推导。
求解一个问题有两个不同的方向:自顶向下与自底向上。
# 自顶向下:记忆化递归
自顶向下:我们在解决问题的时候 对原问题进行拆分。
- 拆分成不同规模的子问题,再对每一个子问题进行拆分。直到它们不能够再拆分为止;
- 由于不能再拆分了,最小规模的子问题不用求解直接得到答案。然后一步一步 向上传递,根据较小规模的子问题得到较大规模的子问题的结果,直到原问题得到了解决。
自顶向下这件事情其实我们一直都在做。在生活和工作中遇到的问题,我们会把解决它们的方案和结果记录到博客和笔记中,如果以后再遇到它们,就不用再解决一遍。
# 自底向上:递推
自底向上与自顶向下最大的不同在于:自底向上没有「拆分问题」的过程。直接从一个问题最小的规模开始,一步一步通过「递推」的方式得到原问题的答案。
这个过程就好像,我们在学习的过程中,由于学习的过程被合理地设计,所有遇到的问题我们都见过。
作者:liweiwei1419 链接:https://suanfa8.com/dynamic-programming/bottom-up 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。