intsum1(int n){int sum =0;for(int i =1; i <= n; i++){
sum +=pow(-1, i);}return sum;}
解法2:
思考规律,如果n为偶数项的话,那么sum = 0,如果n为奇数项的话,sum = -1。
demo
intsum2(int n){if(n %2==0)return0;elsereturn-1;}
完整代码
#include<iostream>#include<cmath>usingnamespace std;constint n =1e6;intsum1(int n){int sum =0;for(int i =1; i <= n; i++){
sum +=pow(-1, i);}return sum;}intsum2(int n){if(n %2==0)return0;elsereturn-1;}intmain(){
time_t s, e, sumtime;
s =clock();int res =sum2(n);
e =clock();
sumtime = e - s;
cout << sumtime;return0;}
2.代码测试
这里我们使用 time_t 来测试sum1函数和sum2函数的性能。
测试结果是:
sum2
sum1
这里测试的n是1000000,如果n趋近于无穷大,那么sum1是不是时间就会更大?
所以这就凸显了算法在程序中的重要性了。
3.如何计算算法的时间复杂度,和空间复杂度呢?
时间复杂度
这里特别指出,在循环的时候为什么是 n + 1 次,因为当for循环执行完 n 次的时候,其实需要进行最后一次判断,判断 i是否还小于等于 n,所以会执行 n + 1 次,然后内层的循环也是如此。
空间复杂度
一个程序包含三种需要的存储空间
1.程序本身需要的空间
2.基本的输入输出
3.需要额外的辅助空间
我们只需要计算第三类空间。
在交换两数时,分析变量类型。
1.x 和 y 属于基本输入输出
2.额外空间是 t
所以,空间复杂度是 o(1)
如何分析本段代码的空间复杂度呢?
intfac(int n){if(n ==0|| n ==1)return1;elsereturn n *fac(n -1);}