求1~n的连续整数和。(利用递归求此程序,并求运行时间)
时间: 2024-09-06 13:06:52 浏览: 98
2019清华912真题(DS部分)1
要使用递归求解1到n的连续整数和,我们可以使用下面的方法。这里我们使用递归来累加数字,首先将问题分解为两个子问题:求1到n-1的和,然后将n加到这个和上。递归的基本情况是当n等于1时,此时的和就是1。
以下是递归函数的C++实现:
```cpp
#include <iostream>
// 递归函数计算1到n的和
int sum(int n) {
if (n == 1)
return 1; // 基本情况
else
return n + sum(n - 1); // 递归情况
}
int main() {
int n = 10; // 假设我们要计算1到10的和
std::cout << "Sum from 1 to " << n << " is: " << sum(n) << std::endl;
return 0;
}
```
运行时间分析:
递归函数的时间复杂度是O(n),因为它需要进行n次递归调用来得到结果。每次函数调用都会涉及到一些基本操作,如参数传递和返回值,这些操作的时间复杂度可以认为是常数时间O(1)。因此,总的运行时间大约是O(n)。
请注意,递归并不是解决这个问题最高效的方法,因为递归调用会增加额外的开销,特别是在函数调用栈上。一个更高效的方法是使用简单的循环来计算和,如下:
```cpp
#include <iostream>
int sum(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) {
total += i;
}
return total;
}
int main() {
int n = 10;
std::cout << "Sum from 1 to " << n << " is: " << sum(n) << std::endl;
return 0;
}
```
这个循环版本的时间复杂度同样是O(n),但它没有递归版本的额外开销。
阅读全文