佛山市制作网站,事件营销方案模板,凡科网app下载,安徽合肥建设网目录 1.什么是递归#xff1a; 1.1递归的思想#xff1a;
1.2递归的限制条件#xff1a;
2.递归举例#xff1a;
2.1举例1#xff1a;求n的阶乘#xff1a;
2.1.1 分析和代码实现#xff1a; 2.1.2图示递归过程#xff1a;
2.2举例2#xff1a;顺序打印一个整数的…目录 1.什么是递归 1.1递归的思想
1.2递归的限制条件
2.递归举例
2.1举例1求n的阶乘
2.1.1 分析和代码实现 2.1.2图示递归过程
2.2举例2顺序打印一个整数的每一位
2.2.1分析和代码实现
2.2.2图示递归过程 1.什么是递归 ❓递归是学习C语言函数绕不开的一个话题那什么是递归呢⭐递归其实是一种解决问题的方法在C语言中递归就是函数自己调用自己。 写一个简单的C语言递归代码
#includestdio.h
int main()
{printf(hehe\n);mian();return 0;
}
上述就是一个简单的递归程序只不过上面的递归只是为了演示递归的基本形式不是为了解决问题代码最终会陷入死递归导致栈溢出Stack overflow。 栈溢出的原因 ⭐我们每次调用printf函数时都会在栈区开辟一块空间因为上述代码会死递归所以会一直调用printf函数但是栈区的空间是有限的当栈区满了之后我们再调printf函数时系统想继续分配空间此时就会栈溢出Stack overflow。 1.1递归的思想 把一个大型复杂的问题层层转化为一个与原问题相似但规模较小的子问题来求解直到子问题不能再被拆分递归就结束了。所以递归过程就是把大事化小的过程 递归中的递就是递推的意思归就是回归的意思接下来慢慢体会 。 1.2递归的限制条件
递归在书写的时候有2个必要条件 1.递归存在限制条件当满足这个限制条件时递归便不再继续。 2.每次递归调用之后越来越接近这个限制条件。渐渐停下来 在下面的例子中我们会逐步体会这两个限制条件 2.递归举例
2.1举例1求n的阶乘 阶乘factorial一个正整数的阶乘是所有小于等于该数的正整数的积且0的阶乘为1 自然数n的阶乘写作n 2.1.1 分析和代码实现
以5为例子我们进行分析 55*4*3*2*1 5*4 4 4*3*2*1 4*3 3 3*2*1 3*2 2 2*1 2*1 1 1 1*0 01 通过观察5我们可以发现当n0时nn*n-1当n0时n1。 如下图所示 因此我们可以定义求n函数为Factn当n0时Factnn*Factn-1当n0时Factn1。 代码实现如下
#includestdio.h
int Fact(int n)
{if (n 0) {return n * Fact(n - 1);}else{return 1;}
}
int main()
{int n 0;scanf(%d, n);int ret Fact(n);printf(%d, ret);
}
运行结果如下 2.1.2图示递归过程 2.2举例2顺序打印一个整数的每一位
输入一个整数m按照顺序打印整数的每一位
例如 输入1234 输出1 2 3 4 输入520 输出5 2 0 2.2.1分析和代码实现
这个题目放在我们面前首先想到的是怎么得到这个数的每一位呢
如果n是一位数那么取出的数字就是它本身,如果n超过一位数即n9就需要拆分每一位。
例如1234 1234%10得到41234/10得到123相当于去掉了4继续对123%10得到3123/10得到12以此类推不断重复%10和/ 10的操作直到1234的每一位都得到但是我们按照此方法得到的不是1 2 3 4而是倒着的4 3 2 1. 那么我们可以这么想每一个数字的最低位置是最容易得到的通过%10就可以得到
我们设想写一个函数Print来打印n的每一位如下表示
Printn
如果n是1234则表示为
Print1234//打印1234的每一位
其中1234中的4可以通过%10得到
那么Print1234可以分为两步
1.Print1234/10//相当于Print123打印123的每一位
2.printf1234%10//打印4
完成了上述两个步骤就完成了1234的每一位打印
那么Print123又可以拆分为Print123/10printf123%10以此类推下去就有 直到被打印的数字变成一位数的时候就不再需要拆分递归完成有了上述的分析代码可以清晰的写出如下所示
#includestdio.h
void Print(int n)
{if(n9){Print(n / 10);printf(%d , n % 10);}else{printf(%d , n);}
}
int main()
{int n 0;scanf_s(%d, n);Print(n);
}
运行结果如下 2.2.2图示递归过程 以上便是我为大家带来的函数递归的第一部分内容若有不足望各位大佬在评论区指出谢谢大家可以留下你们点赞、收藏和关注这是对我极大的鼓励我也会更加努力创作更优质的作品。再次感谢大家