前言
数据结构和算法的最终目标都是降低时间复杂度。
数据结构是从数据组织形式的角度达成这个目标;算法则是从数据处理的角度达成这个目标。
1、什么递归
通俗解释就是某个函数自己调用自己。
递归的两层含义:
(1)递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,并且这些子问题可以用完全相同的解题思路来解决。
(2)递归问题的演化过程是一个对原问题从大到小进行拆解的过程,并且会有一个明确的终点(临界点)。一旦原问题到达了这个临界点,就不用了再往更小的问题上进行拆解了。最后,从这个临界点开始,把小问题的答案按照原路返回,原问题便得以解决。
总结:
(1)递归的基本思想就是把规模大的问题转化为规模小的相同的子问题来解决。
(2)递归必须有明确的结束条件,也就说递归的实现包含了两个部分:一个是递归主体,另一个是终止条件。
递归代码关键在于,写出递推公式和找出终止条件。
2、汉诺塔问题
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上