经过层层分解的子问题最后一定有一个不能再分解的固定值(即终止条件),如
果没有的话就无穷无尽地分解子问题,问题显然是无解的。
解递归题的关键在于我们首先需要根据以上特点判断题目是否可以用递归来解。
经判断可以用递归后,接下来看看用递归解题的基本套路:
递归解题的基本套路
(1)先定义一个函数,明确这个函数的功能,由于递归的特点是问题和子问
题都会调用函数自身,所以这个函数的功能一旦确定了, 之后只要找寻问题与
子问题的递归关系即可。
(2)接下来寻找问题与子问题间的关系(即递推公式),由于问题与子问题
具有相同解决思路,只要子问题调用步骤 1 定义好的函数,问题即可解决。所
谓的关系最好能用一个公式表示出来,比如 f(n) = n * f(n-1) , 发现递推关系
后,要寻找最终不可再分解的子问题的解,即(临界条件),确保子问题不会
无限分解下去。由于第一步我们已经定义了这个函数的功能,所以当问题拆分
成子问题时,子问题可以调用步骤 1 定义的函数,符合递归的条件(函数里调
用自身)。
(3)将第二步的递推公式用代码表示出来补充到步骤 1 定义的函数中。
(4)最后也是很关键的一步,根据问题与子问题的关系,推导出时间复杂度,
如果发现递归时间复杂度不可接受,则需转换思路对其进行改造,看下是否有
更靠谱的解法。
实例说明
评论0
最新资源