3.8递归算法实例及程序实现1.递归算法的概念一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,称为递归算法
递归算法的基本思想是把规模较大的、较难解决的问题变成规模较小的、容易解决的同一问题,规模较小的问题又变成规模更小的问题,当问题小到一定程度时,可以直接得出它的解,从而得到原来问题的“”解
即采用大事化小、小事化了的基本思想
诸如著名的汉诺塔问题、八皇后问题、斐波那契(Fibonacci)的兔子问题、猴子吃桃问题、年龄问题等都是递归问题
VB允许一个自定义函数在函数体的内部调用自己,这样的函数就叫递归函数
2.递归算法的实现要点递归调用必须是有限制的,有限才有意义
所以在进行算法描述时必须设置相关的控制条件,使其成为有限
这可以通过条件语句(If语句)来实现,即只有在设定的条件成立时递归才继续,否则终止递归
可见,构成递归的必须满足以下条件:(1)有明确的结束递归的边界条件(又称终止条件)以及结束时的边界值;(2)函数的描述中包含其本身,即能用递归形式表示,且递归终止条件的发展
3.递归算法的设计方法当所求解问题难于直接求解时,首先,把问题分解成若干个难度较小、较容易求解的子问题,子问题与原问题具有类同的结构
如果子问题能够直接求解,则解之;如果子问题仍不能直接求解,将每个子问题再分解成若干个更简单的子问题,直到解出的子问题能够很容易地求解或解为已知,这是实现递归的模板
然后,设计递归出口(即结束递归的边界条件),在满足出口条件时,递归函数不能再调用自己,必须返回一个确定的值
将这两方面的问题分析好之后,就可以在程序体中定义递归调用了
在通常情况下,递归调用都是要受到条件控制的,而且在被调用的过程中,会对调用条件进行有规律的修改,直到满足边界条件,返回边界值,结束递归;然后按原来的路径逐层返回,求出原问题的解
由此可知,递归算法的设计关键在于递归描述和递归