用户组 管理员
总帖数
阅读权限 255
关注数
有人说易语言 不讲究算法,不是这样的。易语言的编程原理跟其他编程语言一样,哪有不讲究算法的道理?易语言跟其他编程语言一样都要优化代码、讲究编程效率。下面试举一例说明在易语言中如何优化代码。
我们还在读书的时候,常会接触一些数学智力题,比如当最大数为n时计算下面算式的值:
1-2+3-4+5-6+7......+n
我相信没有哪个同学会这样计算:先算1-2的结果,再算1-2+3的结果、、、一步一步这样算下去。这种计算方法很慢,太笨了。有些计算能力比较强的同学可能会较快找到好的方法得到正确的结果。
编程的运算原理跟我们数学的计算方法差不多,一般来说,在数学中好的运算方法用到编程中也是好的,在数学中不好的方法在编程中也会不好。下面我们就用编程的方法计算上面算式的值来说明这一点,我们编制一个子程序"运算最大值"来完成这项功能。
可能一般人首先想到的是下面这种方法: 子程序:运算最大值
返回值类型:长整数型 参数:最大值 数据类型:长整数型 局部容器:临时值 数据类型:长整数型
局部容器:循环值 数据类型:整数型
局部容器:标记值 数据类型:整数型 临时值 = 0
标记值 = 1
如果真 (最大值 ≤ 0)
信息框 (“错误: 最大值 必须 > 0”, 0, )
结束 ()
如果真结束
计次循环首 (最大值, 循环值)
临时值 = 临时值 + 标记值 × 循环值
标记值 = -1 × 标记值
计次循环尾 ()
返回 (临时值)
上面的步骤肯定可以得到正确的答案。但是只要你测试一下,就会发现:当最大值为很大时,程序的执行速度非常慢。在程序开发中,程序的运行效率很重要,能让CPU少执行一条指令都是好的,让我们看看这个程序还有什么可以修改的地方,把程序优化一下。我们修改为下面的代码看看: 子程序:运算最大值
返回值类型:长整数型 参数:最大值 数据类型:长整数型 局部容器:临时值 数据类型:长整数型
局部容器:循环值 数据类型:整数型
局部容器:标记值 数据类型:整数型 临时值 = 0
标记值 = 1
循环值 = 1
如果真 (最大值 ≤ 0)
信息框 (“错误:最大值 必须 > 0”, 0, )
结束 ()
如果真结束
判断循环首 (标记值 ≤ 最大值)
临时值 = 临时值 + 循环值
循环值 = -循环值
如果 (循环值 > 0)
循环值 = 循环值 + 1
否则
循环值 = 循环值 - 1
如果结束
标记值 = 标记值 + 1
判断循环尾 ()
返回 (临时值)
经测试上面代码的执行速度比第一种代码快了一点点,原因是加法运算会比乘法运算快,而代价仅仅是增加了一个整数型变量。但是当最大值为很大时,运算速度仍然很慢。也就是说这个程序仍然不能达到要求,还应该有更优的方案。更优的方案是: 子程序:运算最大值
返回值类型:长整数型 参数:最大值 数据类型:长整数型 如果真 (最大值 ≤ 0)
信息框 (“错误:最大值 必须 > 0”, 0, )
结束 ()
如果真结束
如果 (最大值 % 2 = 0)
返回 (最大值 ÷ 2 × -1)
否则
返回 ((最大值 - 1) ÷ 2 × -1 + 最大值)
如果结束
运用上面的方法,计算结果好象即算即出。在数学中的最好计算方法是不是这种方法?怎么样?想到了吗?没错,当最大值很大很大的时候这三种程序的运行时间简直是天壤之别!所以,不要认为CPU运算速度快就把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做,因为CPU是为用户服务的,不是为我们程序员服务的。 复制代码