算法设计与分析:基于C++编程语言的描述
上QQ阅读APP看书,第一时间看更新

1.4.1 认知递归

子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,称为递归。直接或间接调用自身的算法称为递归算法。递归的基本思想就是“自己调用自己”,体现了“以此类推”“重复同样的步骤”这样的理念。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的小问题,直至每个小问题都可以直接解决。

通常,采用递归算法来求解问题的一般步骤如下:

(1)分析问题、寻找递归关系。找出大规模问题和小规模问题的关系。换句话说,如果一个问题能用递归方法解决,它必须可以向下分解为若干个性质相同的规模较小的问题。

(2)找出停止条件,该停止条件用来控制递归何时终止,在设计递归算法时需要给出明确的结束条件。

(3)设计递归算法、确定参数,即构建递归体。

递归算法的运行过程包含两个阶段:递推和回归。递推指的是将原问题不断分解为新的子问题,逐渐从未知向已知推进,最终达到已知的条件,即递归结束的条件。回归指的是从已知的条件出发,按照递推的逆过程,逐一求值回归,最后达到递推的开始处,即求得问题的解。