递增计数器示例

假设你在沙滩上想用石子摆一个三角形,第一行放 1 颗,第二行放 2 颗,第三行放 3 颗,依此类推,形状如下:


               *
              * *
             * * *
            * * * *

(大约 2500 年前,毕达哥拉斯等人正是通过这类问题开创了数论的雏形。)

假设你想知道摆一个 7 行的三角形需要多少颗石子?

显然,你需要把从 1 到 7 的数字相加。有两种实现方式:从最小的数字 1 开始依次累加 1、2、3、4……;或者从最大的数字开始倒序累加 7、6、5、4……。由于这两种方式都能体现 while 循环的常见写法,我们会分别实现两个示例,一个递增计数,一个递减计数。在第一个示例中,我们从 1 开始依次加上 2、3、4 等。

如果只是累加一短串数字,最简单的方法是一次性全部相加。但如果你事先不知道列表有多少个数字,或者需要应对非常长的列表,就需要设计成重复执行简单操作多次,而不是一次性执行复杂操作。

例如,不必一次性算出所有石子总数,你可以先把第一行的 1 颗石子与第二行的 2 颗相加,再把前两行的总数与第三行的 3 颗相加,接着把前两行总数加上第四行的 4 颗,依此类推。

该过程的关键特点是每次重复的动作都很简单。本例中,每一步只需要将两个数字相加:当前行的石子数与已累加的总数。这种两数相加的操作会不断重复,直到最后一行被加入总数。在更复杂的循环中,重复动作可能不会如此简单,但一定比一次性完成所有操作更简洁。