用c语言编写一个程序,对于给定的正整数n,求1+2+3...+n,采用逐个累加以及利用n(n+1)/2高斯法(或者叫等差数列求和公式法)两种方法求解,对于给出相同的n,两种不同方法的求和结果和求解的时间,并利用相同数据进行测试验证。
时间: 2024-12-11 10:34:50 浏览: 15
在C语言中,你可以创建两个函数分别用递归和数学公式的方式计算1到n的和。首先,我们来看递归方法:
```c
#include <stdio.h>
// 递归函数,计算1到n的和
int sum_recursive(int n) {
if (n == 1) // 基本情况
return 1;
else
return n + sum_recursive(n - 1); // 递归调用
}
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
int recursive_sum = sum_recursive(n);
printf("递归方法求和结果: %d\n", recursive_sum);
printf("时间复杂度: O(n)\n"); // 递归操作次数会随着n增长
// 现在使用等差数列求和公式进行计算
int formula_sum = (n * (n + 1)) / 2;
printf("高斯法(公式)求和结果: %d\n", formula_sum);
printf("时间复杂度: O(1)\n"); // 公式计算恒定时间完成
// 验证两者结果是否一致
if (recursive_sum == formula_sum)
printf("两种方法的结果一致。\n");
else
printf("两种方法的结果不一致。\n");
return 0;
}
```
在这个程序中,递归方法的时间复杂度为O(n),因为它需要做n次加法;而公式方法的时间复杂度为O(1),因为它只需要一次简单的算术运算。当输入较大的n值时,你会明显看到使用公式法的速度快得多。
阅读全文