1到100求和学算法之循环的秘密(3)
1 引言上一篇文章分析了没有必要定义a1,a2,···,a100这100个变量,其根本原因在于定义的这些变量在程序运行期间,这些变量对应的内存单元没有发生任何的改变,其本质为常量。既然没有必要定义这么多的变量,那如何减少变量定义的个数呢?本文一起来探索实现这一目标的做法。2 问题描述1到100求和问题几乎是所有编程语言初学者都会接触到的一个问题,其定义如下,编程实现:1 + 2 + ··· + 100 = ?限制条件:使用尽可能少的变量。3 问题分析算法1两个整数的求和sum = 0a1 = 1a2 = 2sum = a1 + a2关于1到100求和问题,截至到目前,主要的工作有:首先介绍了两个整数的求和算法1,然后以此类推到100个整数的求和算法2,接着分析了没有必要定义a1到a100这100个变量。 算法2仅依赖变量定义和加法运算符的1到100的求和a1 = 1a2 = 2···a100 = 100sum = a1 + a2 + ··· +a100(上面两处省略号并非程序语言关键词,而是由于空间有限故省略)关于算法2,再做一些深入的分析,对其进行优化。首先定义变量sum用来保存最后的求和结果。注意这里定义的变量sum,意味着程序执行期间,sum的值会多次发生改变,最后一次改变后,得到的值就是最终的结果。算法2是一次性将a1到a100全部加到sum中,将一次性的行为变更为逐步累加的过程,即每一次加一个整数到sum中,这样每一次加法操作后,sum变量的值就会改变,符合变量的定义。从第一个整数开始,共执行100步操作,每次加一个整数,第100步执行加法完成后就得到最终的结果,如算法3所示。算法3仅依赖变量定义和加法运算符的1到100求和(改进版)sum = 0a1 = 1sum = sum + a1a2 = 2sum = sum + a2···a100 = 100sum = sum +a100(上面省略号并非程序语言关键词,而是由于空间有限故省略)从算法2到算法3,看似微小的变化,其体现的算法思想完全不一样。算法2是一次性的操作,而算法3是一次性的操作拆分成了很多微小的步骤,这体现了一种分解的思路,从而使得问题的理解更加深刻了。实现了这种分解之后,如何实现引言最初提出的减少变量定义的个数呢?主编:王楠岚责编 :Justin