对于给定的正整数n,求1! + 2! + 3! + …… + n!,给出一种时间复杂度位O(n)的解法,并使用C/C++描述。
时间: 2024-11-29 18:37:25 浏览: 17
java代码-使用java解决给定一个整数N,编写程序求1!+2!+……+N!的源代码
5星 · 资源好评率100%
为了计算从1到n的所有阶乘之和,一个有效的时间复杂度为O(n)的方法是动态规划。我们可以创建一个数组来存储每个数的阶乘结果,然后逐个累加。以下是使用C++的实现:
```cpp
#include <iostream>
using namespace std;
// 计算并返回n的阶乘
long long factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
int sumOfFactorials(int n) {
long long sum = 0; // 初始化和为0
for (int i = 1; i <= n; ++i) {
sum += factorial(i); // 累加每个数的阶乘
}
return sum;
}
int main() {
int n;
cout << "请输入一个正整数n: ";
cin >> n;
if (n > 0) {
long long result = sumOfFactorials(n);
cout << "1! + 2! + 3! + ... + " << n << "! = " << result << endl;
} else {
cout << "输入错误,n应大于0." << endl;
}
return 0;
}
```
在这个程序中,`factorial`函数负责递归计算阶乘,而`sumOfFactorials`函数则循环遍历1到n,每次调用`factorial`并将结果累加到`sum`上。
阅读全文