栈与递归

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维何M762

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值