递归之我见

递归是一门玄学,通过这几日观摩我帅气组长给我们的资料,我也参悟到了一些东西。。。。
递归好比你想知道你现在在哪里,但现在只知道你的出发点是什么,且每个地点与地点之间是有联系的,所以你得往回走,一直走到出发点,再走回来并记住路途中经过的点,这样你就知道你原来是在哪里了
所以我觉得做递归的两大关键就是知道这个递归的出发点也就是递归的基线条件还有变量变化的规律,实质上也是一种循环的终止条件和循环体,通过重复函数调用实现循环。
举两个比较典型的例子吧!

1.十进制转化为二进制
在这里插入图片描述
注意哦这是要把所有的工序做完然后从最底部往上输出,而且每个被除数都是上面的数除2得来的,终止情况就是当最后除2后的结果为0时,所以递归函数代码
void toBin(int num)
{
if(num>0)
{

toBin(num/2);

printf("%d",num%2);
}

}
输出在递归的后面就是因为要从基线位置输出!你得都递归完了才会到基线吧啊喂

再康康一个题
2.用递归实现逆序输出整数
在这里插入图片描述
这个题循环实现的话就是把这个数求余输出,剩下的数就是原数除十,剩下的数再求余输出,再除十。。。。。一直到剩下个零,除不了十了。递归实现的话就是把这个关系递出来
void Reverse(int n)
{
if(n>0)
{
printf("%d",n%10);
Reverse(n/10);
}
}
那么这个题怎么是先输出再递归呢,因为这个题是归一次就需要输出相应的值,从顶部往回输出

总结:递归就是一定一定要理清变量变化的关系,找出循环所在,也一定要找到基线位置 还要知道是先需要前面的值还是后面的值,调整递归部分和其他部分的位置

多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值