中科白癜风医院微博 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/etbdf/学习工控知识,就来工控小新
农历十一月初九/12/21
往期推荐
你能在10秒内回答这个C语言问题吗?从键盘中输入任意一个大写字母,输出它在字母表中的位置和其后面的第四个字母
年12月19日:C语言小白也能写出的约分分数的程序,只需三步,快来试试吧!
每日一练
/DailyExercises
题目:
编写一个递归函数和一个非递归函数,分别实现求1+2+3+....+n的运算
题目分析
题目要求编写一个递归函数和一个非递归函数,分别实现求1+2+3+…+n的运算,其中n是一个正整数,表示求和的项数。
递归函数的特点是在函数体内调用自身,形成一个循环的过程,直到满足某个终止条件为止。递归函数的优点是代码简洁,逻辑清晰,易于理解,但是缺点是占用较多的栈空间,可能导致栈溢出或效率低下。
非递归函数的特点是不使用递归,而是使用循环结构,如for或while,来重复执行某些操作,直到达到目标为止。非递归函数的优点是节省栈空间,提高效率,但是缺点是代码复杂,逻辑难以把握,不易于理解。
求1+2+3+…+n的运算,也可以写成
,这是一个等差数列的求和公式,有两种方法可以求解:
一种是使用递推公式,即
,这意味着求n项的和,可以先求n-1项的和,然后再加上第n项,这样就形成了一个递归的过程,终止条件是当n为1时,返回1。
另一种是使用通项公式,即
,这意味着求n项的和,可以直接用n和n+1的乘积除以2得到,这样就避免了递归,只需要一次计算即可。
程序展示
#includestdio.h//定义一个递归函数,用于求1+2+3+....+n的运算intsum_cursion(intn){//如果n为1,返回1,作为终止条件if(n==1)turn1;//否则,返回前n-1项的和加上第n项,作为递推公式turnsum_cursion(n-1)+n;}//定义一个非递归函数,用于求1+2+3+....+n的运算intsum_noncursion(intn){//直接返回通项公式的结果turnn*(n+1)/2;}intmain(){intn;//定义一个整数变量,用于存储输入的nprintf("请输入一个正整数n,表示求和的项数:\n");//提示用户输入scanf("%d",n);//从标准输入读取n//检查n是否为正,如果不是,打印错误信息并退出程序if(n=0){printf("错误:n必须为正整数!\n");turn1;}//调用递归函数和非递归函数,分别求解并打印结果printf("使用递归函数求解,结果为:%d\n",sum_cursion(n));printf("使用非递归函数求解,结果为:%d\n",sum_noncursion(n));turn0;}
程序测试
这个程序在VC6.0的环境下运行正常,可以处理各种合法和非法的输入,输出正确的结果。
当我们要求1到10的和时,输入一个10,立马得出依据递归和非递归函数求解的值
下期题目
一个正整数如果等于组成它的各位数字的阶乘之和,该整数成为阶乘和数。请输出所有阶乘树(不超过10万)
#百度秋冬打卡挑战赛#