递归小总结

递归:在程序中直接或间接调用自身的算法成为递归。

使用条件:
(1)明确递归的终止条件。
(2) 一个较为复杂的问题可以化为几个简单的相似小问题,以确保其可以调用前面的函数。

书写提示:可以先写出终止条件,之后再关注其中分解出的问题,使其成立,在问题的解决中就会让体现出会发现与已分解的问题相似,然后就使用递归思想。
在使用递归思想时不必明确每一步的步骤,在写程序时就一定要默认自己的递归成立,否则在复杂的递归中会思路混乱。

例如汉诺塔问题,如果想移动就是把n-1个圆盘放到B,第n个放到C之后,B上面的全放过去就ok。
对于B来说,B上面的n-2个圆盘又要放到A上,然后第n-1个放到C上,之后A上面的在放到C上就ok…如此循环下去,对于1个就只是输出A->C(这就是最简单问题,也是终止条件),所以输出只写A->C就可以了,在一步步递归中会输出B。

递归其本质就是将其大问题转化为层层套用的小问题并找到最方便的函数,然后再层层回溯。
经典递归题目:求最大公约数

//求m,n的最大公约数,规定m>n.
gcd (m,n){
if(n==0) return m;
else return (n,gcd(m%n));
}
//首先确定终止条件n等于0,之后层层分解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值