假设你在沙滩上想用石子摆一个三角形,第一行放 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 颗,依此类推。
该过程的关键特点是每次重复的动作都很简单。本例中,每一步只需要将两个数字相加:当前行的石子数与已累加的总数。这种两数相加的操作会不断重复,直到最后一行被加入总数。在更复杂的循环中,重复动作可能不会如此简单,但一定比一次性完成所有操作更简洁。