您的位置:首页 > 其它

简单问题藏着大陷阱

2016-04-11 18:28 260 查看
写一个函数计算当参数为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 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优化 算法