要不依赖语言来解释算法,用普通的话描述每一步,点明数据和决策,再用伪代码写出同样的步骤。如果之后有人用 Python、Java 或电子表格来实现,这份解释仍然必须是正确的。
怎样把它解释好?
- **用一句话说明算法的用途:**输入和输出。
- 按顺序列出步骤,每一步以动词开头,并点明变量。
- 说明每个决策及其条件,例如”如果新数字比 Smallest 小”。
- 说明它如何停止。
- 用小数据的追踪来支持你的说明。
避免依赖某种语言的说法,比如”调用 min 函数”。这会把你被要求展示的逻辑藏起来。
例题
在逐个输入的四个数字中,找出最小的一个。
普通步骤:
- 输入第一个数字,把它存为 Smallest。
- 再重复三次:输入一个数字;如果它比 Smallest 小,就把它存为 Smallest。
- 输出 Smallest。
伪代码:
INPUT Number
Smallest ← Number
FOR Count ← 2 TO 4
INPUT Number
IF Number < Smallest THEN
Smallest ← Number
ENDIF
NEXT Count
OUTPUT Smallest
用 Python 写出的同一逻辑:
smallest = int(input())
for count in range(2, 5):
number = int(input())
if number < smallest:
smallest = number
print(smallest)
用 14、9、21、9 追踪:
| Count | Number | Number < Smallest | Smallest |
|---|---|---|---|
| 开始 | 14 | 14 | |
| 2 | 9 | 真 | 9 |
| 3 | 21 | 假 | 9 |
| 4 | 9 | 假 | 9 |
输出是 9。最后一个 9 并不比 9 小,所以 Smallest 保持不变。列表中最小的数是 9,所以答案正确。
要小心的错误
一个常见的失误,是用一个固定的数字作为 Smallest 的初始值。
错误的起点:
Smallest ← 0,数字是 14、9、21、9。没有任何数字比 0 小,所以输出 0,一个从未输入过的值。
改正的方法是像上面那样,从第一个真实的值开始。普通步骤的解释把这一点说得很清楚:“把第一个数字存为 Smallest”。跳过这一步的解释,让人无从发现这个错误。
自我检测
1. 用普通步骤解释一个算法:数出五个数字中有几个是负数。
Show answer
把 Count 设为 0。重复五次:输入一个数字;如果它小于 0,就给 Count 加 1。五个数字之后,输出 Count。
2. 对输入 −3、4、0、−1、7 追踪下面的算法,并说明它做什么。
Count ← 0
FOR I ← 1 TO 5
INPUT N
IF N < 0 THEN
Count ← Count + 1
ENDIF
NEXT I
OUTPUT Count
Show answer
Count 起始为 0,−3 之后是 1,4 和 0 之后仍是 1,−1 之后是 2,7 之后仍是 2。输出 2。它数出负数的个数。
3. 把”用 len 函数找出有多少个项目”改写成不依赖语言的步骤。
Show answer
“数项目:把计数器设为 0,每看到一个项目就加 1。“这样描述了逻辑,没有点名任何内置函数。
接下来学什么
设计习惯建立起来之后,继续学习重复结构与数组,再做综合练习。安全 Python 沙盒让你运行上面例子的简短版本,并与你的追踪对照。
听到你的解释,老师能很快发现缺失的步骤,这是我们一对一线上计算机科学补习的一部分。