编写一个程序exp1-1.cpp,对给定的正整数n,求1+2+3+…+n,采用逐个累加和n(n+1)(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。用c++语言编写运行
时间: 2024-11-25 19:11:03 浏览: 7
在C++中,我们可以创建一个名为`exp1-1.cpp`的程序,其中包含两个函数分别实现两种方法求1到n的和。一种是传统的递归方法(高斯法),另一种是循环迭代方法。以下是程序的基本框架:
```cpp
#include <iostream>
#include <chrono> // 引入库用于测量时间
// 采用高斯法(递归)
unsigned long long sum_recursive(int n) {
if (n == 0)
return 0;
else
return n + sum_recursive(n - 1);
}
// 采用循环迭代
unsigned long long sum_iterative(int n) {
unsigned long long sum = 0;
for (int i = 1; i <= n; ++i) {
sum += i;
}
return sum;
}
int main() {
int n;
std::cout << "请输入一个正整数: ";
std::cin >> n;
auto start_time1 = std::chrono::high_resolution_clock::now(); // 开始计时
unsigned long long result1 = sum_recursive(n);
auto end_time1 = std::chrono::high_resolution_clock::now();
auto duration1 = std::chrono::duration_cast<std::chrono::microseconds>(end_time1 - start_time1);
auto start_time2 = std::chrono::high_resolution_clock::now(); // 开始计时
unsigned long long result2 = sum_iterative(n);
auto end_time2 = std::chrono::high_resolution_clock::now();
auto duration2 = std::chrono::duration_cast<std::chrono::microseconds>(end_time2 - start_time2);
std::cout << "高斯法求和结果: " << result1 << ", 时间消耗: " << duration1.count() << "us" << std::endl;
std::cout << "循环迭代法求和结果: " << result2 << ", 时间消耗: " << duration2.count() << "us" << std::endl;
// 测试数据可以根据需要调整,这里仅示例
// 对于较大的n,可能会观察到递归方法的时间明显增加,因为有较多的函数调用开销
// 而迭代方法通常更快,因为它避免了函数调用栈的深度增长
if (result1 != result2) {
std::cerr << "错误:两种方法得到的结果不一致!" << std::endl;
}
return 0;
}
```
当你运行这个程序并输入一个正整数n后,它会显示两种方法的求和结果以及各自所花费的时间(以微秒为单位)。在实际操作中,记得用足够大的数值测试性能差异,特别是当n非常大时。
阅读全文