递归算法就是在算法中直接或间接调用算法本身的算法。使用递归算法的前提有以下两个:
①原问题可以层层分解为类似的子问题,且子问题比原问题的规模更小。
②规模最小的子问题具有直接解。
设计递归算法的原则是用自身的简单情况来定义自身,设计递归算法的方法如下。
①寻找分解方法:将原问题转化为子问题求解。例如,n!=n(n-1)!。
②设计递归出口:根据规模最小的子问题确定递归终止条件。例如,求解n!,当n=1时,n!=1。
2.递归过程的实现
递归进层(i→i+1层)系统需要做三件事:
①保留本层参数与返回地址。
②为被调用函数的局部变量分配存储区,给下层参数赋值。
③将程序转移到被调函数的入口。
而从被调用函数返回调用函数之前,递归退层(i-i+1层)系统也应完成三件工作:
①保存被调函数的计算结果。
②释放被调函数的数据区,恢复上层参数。
③依照被调函数保存的返回地址,将控制转移回调用函数。
当递归函数调用时,应按照“后调用先返回”的原则处理调用过程,因此上述函数之间的信息传递和控制转移必须通过栈来实现。系统将整个程序运行时所需的数据空间安排在一个栈中,每当调用一个函数时,就为它在栈顶分配一个存储区,而每当从一个函数退出时,就释放它的存储区。显然,当前正在运行的函数的数据区必在栈顶。
栈与递归
最新推荐文章于 2022-08-15 23:05:11 发布