递归是一门玄学,通过这几日观摩我帅气组长给我们的资料,我也参悟到了一些东西。。。。
递归好比你想知道你现在在哪里,但现在只知道你的出发点是什么,且每个地点与地点之间是有联系的,所以你得往回走,一直走到出发点,再走回来并记住路途中经过的点,这样你就知道你原来是在哪里了
所以我觉得做递归的两大关键就是知道这个递归的出发点也就是递归的基线条件还有变量变化的规律,实质上也是一种循环的终止条件和循环体,通过重复函数调用实现循环。
举两个比较典型的例子吧!
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);
}
}
那么这个题怎么是先输出再递归呢,因为这个题是归一次就需要输出相应的值,从顶部往回输出
总结:递归就是一定一定要理清变量变化的关系,找出循环所在,也一定要找到基线位置 还要知道是先需要前面的值还是后面的值,调整递归部分和其他部分的位置
多多指教!