解题思路:
这个题出的非常好,既可以用迭代法来求阶乘和,又可以使用函数递归来求,妙极了。
思路1(迭代法):巧妙的利用for循环来遍历1--N中间的数,再定义两个变量,一个来存放这个数的阶乘res *= i;另一个存放阶乘和
思路2(递归法):当遍历的数(i)作为参数传入recursion函数,i >= 2时,就返回recursion(i - 1) * i,否则,返回1
注意事项:
题目要求N <= 20.要知道20的阶乘是非常大的,必须注意数据类型,定义为long long int型,这样才能存放下
参考代码:
1、迭代法
#include <stdio.h> int main() { int N,i; scanf("%d",&N); long long int res = 1,sum = 0;//避免数据过大,导致程序错误 for(i = 1;i <= N;i++) { res *= i;//计算遍历数的阶乘 sum += res;//来求阶乘和 } printf("%d",sum); return 0; }
2、递归法
#include <stdio.h> long long int recursion(int x) { if(x < 2)//如果x小于2.返回1 return 1; else// x >= 2返回前一个数的阶乘,再乘以这个数本身 return recursion(x - 1) * x; } int main() { int N,i; scanf("%d",&N); long long int sum = 0; for(i = 1;i <= N;i++) { sum += recursion(i);//先遍历一下把1到N之间的数作为参数传进去,然后累加,即可得到阶乘和 } printf("%lld",sum); return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复