前言
依旧是我这个跑路人,学到了c语言中的重难点递归上了好好总结一波。
递归有点抽象所以我用例题来做主体进行讲解。
一、什么是递归
递归就是一个过程或一个函数在其定义或者说明中直接或间接调用自身的一种方法。
每次递归的时候系统都会为函数重新规划一片内存所以使用递归时不宜次数过多否则容易导致栈溢出。
我们在使用递归主要目的是为了大事化小将函数代码变得干净简洁。
二、例题
1.打印整数每一位
本题是实现整数的数字打印如输入1234 打印1 2 3 4
在使用递归时一定要学会在适当情况时结束递归,所以每一个使用递归完成的函数一定是要有自己的结束条件的本题的结束条件是:if(n>9)在一次次递归中函数从1234逐渐变为1无法进入语句中也就无法继续递归然后就先以n=1进行下条语句printf 然后返回 n = 12 时的函数时12%10得到了2 后面同上
是不是还挺简单的。
(这里有栈的思想,博主会在本篇文章评论中推荐一篇关于栈思想的文章)
2. 斐波那契数列
(个人感觉使用递归来解决函数问题十分简单)
首先条件: 前两个数为1后面为前两个数之和,高中都学过俺就不赘述了。
上代码!!
int feibo(int n)
{
if (n <= 2)
{
return 1;
}
else
{
return feibo(n - 1) + feibo(n - 2);
}
}
int main(void)
{
int n = 0;
scanf("%d", &n);
int ret = feibo(n);
printf("%d", ret);
return 0;
}
我认为像斐波那契数列以及与他相似的数列都可以使用以下思想:
1.寻找首要条件,比如这道题的首要条件是当n<=2时 值为1其他的n值都可以从n<=2出衍生出来
2.找其他n值时与n<=2时的关系。
就写出了这个代码。青蛙跳台阶,汉诺塔也是相同原理。不过这个原理并不对所有的递归适用。(之后博主也会对此进行总结)
总结
还是重复一下由斐波那契数列总结出的结论
用递归时如果可以找到原始条件就用原始条件和后面规律来写递归可以大大降低难度哦~
建议多看两遍斐波那契例题讲解。
就这样,拜拜。