2.递归调用的内部过程 【算法2-1】中求阶乘的问题,假设程序运行时,n=4,那么程序的执行过程。 从上面可以看出,递归调用的过程分为两个阶段: 1)递归过程:将原始问题不断转化为规模小了一级的新问题,从求4!变成求3!,变成求2!,最终达到递归终结条件,求1!; 2)回溯过程:从已知条件出发,沿递归的逆过程,逐一求值返回,直至递归初始处,完成递归调用。 2.递归调用的内部过程 在这两个阶段中,系统会分别完成一系列的操作。在递归调用之前,系统需完成三件事: 为被调用过程的局部变量分配存储区; 将所有的实参、返回地址等信息传递给被调用过程保存; 将控制转移到被调过程的入口。 从被调用过程返回调用过程之前,系统也应完成三件工作: 保存被调过程的计算结果; 释放被调过程的数据区; 依照被调过程保存的返回地址将控制转移到调用过程。 在计算机中,是通过使用系统栈(后面的章节会介绍“栈”)来完成上述操作的。 1.4.3 递归转换为非递归 1.递归转化为递推 当递归算法所涉及的数据定义形式是递归的情况下,通常可以将递归算法转化为递推算法,用递归的边界条件作为递推的边界条件。比如求阶乘、斐波那契数列等。 递推也是一种从已知条件出发,用一种具体的算法,一步一步接近未知,一般采用循环结构,经常和枚举配合使用。递推算法
原创力文档

文档评论(0)