追踪表记录每一步之后每个变量的值,让你能证明算法做了什么,而不是猜。题目给出伪代码,要求输出或某一时刻的变量值时,就会用到它。
它建立在定义输入和输出之上,并通向设计带边界情况的选择结构,在那里追踪会显示哪个分支被执行。
怎样建立追踪表?
- 每个变量一列,要展示的条件一列,输出也一列。
- 在第一行写初始值,在任何循环之前。
- **一次一行地执行算法。**变量改变时,在下一行写它的新值。没变的值向下抄。
- 在 OUTPUT 执行的那一刻记录输出。
- **检查停止点:**知道循环为什么结束。
例题
追踪这个算法并给出输出。
Total ← 0
Count ← 0
FOR N ← 1 TO 5
IF N MOD 2 = 1 THEN
Total ← Total + N
Count ← Count + 1
ENDIF
NEXT N
OUTPUT Total, Count
**第 1 步,列和初始值:**N、N MOD 2、Total、Count。从 Total = 0 和 Count = 0 开始。
第 2 步,每一轮一行:
| N | N MOD 2 | Total | Count |
|---|---|---|---|
| 开始 | 0 | 0 | |
| 1 | 1 | 1 | 1 |
| 2 | 0 | 1 | 1 |
| 3 | 1 | 4 | 2 |
| 4 | 0 | 4 | 2 |
| 5 | 1 | 9 | 3 |
**第 3 步,输出:**循环在 N = 5 之后结束,所以输出是 9, 3。
**检查:**1 到 5 之间的奇数是 1、3、5。它们的和是 9,共 3 个。这与表格一致。
要小心的错误
一个常见的失误,是跳过起始行和没有变化的行。
**错误的追踪:**学生只写了 N = 1、3、5 的行,并且从 Total = 1 开始。
表格看起来整齐,但它再也无法证明偶数被测试过并被放过。
改正的方法是写上起始行,并且每一轮都写一行,即使数值只是向下抄。如果算法的 IF 条件有错,比如不小心写成 N MOD 2 = 0,缺少的行就会把它藏起来。完整的表格会显示哪一次测试失败。
自我检测
1. 追踪下面的算法并给出输出。
X ← 3
Y ← 10
WHILE Y > X DO
Y ← Y - X
X ← X + 1
ENDWHILE
OUTPUT X, Y
Show answer
起始 X = 3,Y = 10。测试 10 > 3 为真:Y = 7,X = 4。测试 7 > 4 为真:Y = 3,X = 5。测试 3 > 5 为假,循环停止。输出 5, 3。
2. 输出是什么?
S ← 0
FOR I ← 2 TO 8 STEP 2
S ← S + I
NEXT I
OUTPUT S
Show answer
I 取值 2、4、6、8。S 依次是 2、6、12、20。输出 20。
3. 在例题中,把条件改成 N MOD 2 = 0,输出是什么?
Show answer
现在 N = 2 和 N = 4 被计入。Total = 2 + 4 = 6,Count = 2。输出 6, 2。
接下来学什么
下一步,把追踪用到带边界情况的选择结构上。在伪代码追踪训练器里练习小型原创算法,它会显示每个变量的变化和被执行的分支。
追踪的质量取决于背后的细心,老师可以在一对一线上计算机科学补习中逐行检查你的表格。练习题包含若干追踪题。