引子我们经常遇到 “递归” 这个名词却不知道是什么意思今天我们就讲一下递归什么是递归看这是递龟好了我们讲完了Y(^o^)Y哈哈开个玩笑我么我们来讲一个故事听懂了递归就懂了从前有个小社区区里有个zzxjason他给大家讲了一个故事从前有个小社区区里有个zzxjason他给大家讲了一个故事…这个故事有什么特点是不是在故事中再次提到相同的故事这就是递归的重要概念。回到 C一个函数是可以调用另一个函数的Σ(⊙▽⊙a可如果函数调用自己就是特例就像故事中故事调用自己我们把函数调用自己的现象叫递归再次举个栗子当我们用递归写一个上面的故事void故事(){printf(从前有个小社区 区里有个zzxjason 他给大家讲了一个故事);故事();}这样每次输出就是这个故事故事中提到的故事就是这个故事当然这不是标准的 C 语言#includebits/stdc.husingnamespacestd;voidgu_shi(){printf(从前有个小社区 区里有个zzxjason 他给大家讲了一个故事\n);gu_shi();}intmain(){gu_shi();}当你与运行后会发现会无限循环这就是因为没有终止条件函数会一直调用自己终止条件是什么就是当函数调用自己时当符合条件就不调用自己了我们给代码加上终止条件#includebits/stdc.husingnamespacestd;voidgu_shi(intx){if(x101){//当讲了 10 次故事时结束领略一下为啥是 10 1return;// return前可以加东西可return不要忘加否则程序会继续运行下去}printf(从前有个小社区 区里有个zzxjason 他给大家讲了一个故事\n);gu_shi(x1);// 下一次}intmain(){gu_shi(1);// 1 代表讲了第一次故事}执行结果从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事从前有个小社区 区里有个zzxjason 他给大家讲了一个故事接下来上题\(^o^)/YES!例题洛谷 B2064 斐波那契数列或信息学奥赛一本通 1159斐波那契数列—个人建议写洛谷的那题更有难度只讲洛谷的那题我们看这一题B2064 斐波那契数列题目描述x 时间限制 1.00s 内存限制 128.00MB斐波那契数列是指这样的数列数列的第一个和第二个数都为 1接下来每个数都等于前面 2 个数之和。给出一个正整数 a要求斐波那契数列中第 a 个数是多少。输入格式第 1 行是测试数据的组数 n后面跟着 n 行输入。每组测试数据占 1 行包括一个正整数 a1≤a≤30。输出格式输出有 n 行每行输出对应一个输入。输出应是一个正整数为斐波那契数列中第 a 个数的大小。输入输出样例输入452191输出5141811看到这题 我们要用递归做那么我们框架先写好就不多加讲解了#includebits/stdc.husingnamespacestd;intn;intfei_bo(intx){if(){}}intmain(){scanf(%d,n);for(inti1;in;i){inta;scanf(%d,a);printf(%d\n,fei_bo(a));}}我们接下来就要想fei_bo函数怎么写我们知道第1个和第2个数是1那就可以#includebits/stdc.husingnamespacestd;intn;intfei_bo(intx){if(x1||x2){return1;}}intmain(){scanf(%d,n);for(inti1;in;i){inta;scanf(%d,a);printf(%d\n,fei_bo(a));}}当要第一位或第二位时返回1那要看斐波那契数列第x位是多少就是第(x - 1)位加第(x - 2)位的数于是就编好了是不是很简单#includebits/stdc.husingnamespacestd;intn;intfei_bo(intx){if(x1||x2){return1;}returnfei_bo(x-1)fei_bo(x-2);}intmain(){scanf(%d,n);for(inti1;in;i){inta;scanf(%d,a);printf(%d\n,fei_bo(a));}}看看提交结果会了吧就这么简单♪(∀●)课后习题洛谷 UVA10696 f91洛谷 P1427 小鱼的数字游戏洛谷 B4025 最大公约数 提示辗转相减法请都用递归完成对了说明大概掌握了上一篇下一篇Thank you for watching