写一个函数计算当参数为n(n很大)时的值1-2+3-4+5-6+7....+n.
你可能会马上写出如下代码:
1 #include<stdio.h>
2 #include<stdlib.h>
3 long fn(long n)
4 {
5 long temp=0;
6 int i,flag=1;
7 if(n<=0)
8 {
9 printf("input error\n");
10 exit(1);
11 }
12 for(i=1;i<=n;++i)
13 {
14 temp+=(flag*i);
15 flag=-1*flag;
16 }
17 return temp;
18 }但....
执行结果肯定没问题,但是当n很大时这个程序效率很低,尤其在嵌入式系统开发中,程序的运行效率很重要。
然后你可能改进了代码
19 long fn1(long n)
20 {
21 long temp=0;
22 int i=1,j=1,flag=1;
23 if(n<=0)
24 {
25 printf("input error\n");
26 exit(1);
27 }
28 while(j<=n)
29 {
30 tmpe+=i;
31 i=-i;
32 i>0?i++:i--;
33 j++;
34 }
35 return temp;
36 }比起上一个程序,将所有涉及到乘法指令的语句改为执行加法语句,在运算时间上缩短了很多,而代价只是增加了一个整型变量。
仍然不够优化欧!
37 long fn2(long n)
38 {
39 if(n<=0)
40 {
41 printf("input error\n");
42 exit(1);
43 }
44 if(0==n%2)
45 return (n/2)*(-1);
46 else
47 return (n/2)*(-1)+n;
48
49 }有没有很惊讶!!
不要认为CPU运算速度快就把所有问题推给它做,我们应该将代码优化再优化。
不要忘了最后的测试工作!!
50 int main()
51 {
52 printf("ret: %d %d %d\n",fn(100),fn1(100),fn2(100));
53 return 0;
54 }本文出自 “小止” 博客,请务必保留此出处http://10541556.blog.51cto.com/10531556/1762707
原文:http://10541556.blog.51cto.com/10531556/1762707