解题思路:
这个题出的非常好,既可以用迭代法来求阶乘和,又可以使用函数递归来求,妙极了。
思路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 人评分
WU-字符串比较 (C++代码)浏览:824 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:660 |
Hello, world! (C++代码)浏览:1778 |
出圈】指针malloc版浏览:377 |
分解质因数 (C++代码)浏览:1561 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:1059 |
C二级辅导-分段函数 (C语言代码)浏览:790 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:461 |
回文数(一) (C语言代码)浏览:1170 |
1073题解浏览:652 |