跳到正文
IGCSE·Tuition
计算机科学 · 课程

追踪函数的返回值

函数看起来很短,每一行你都读得懂,可是最后的答案还是算错了。

本页内容
  1. 追踪函数的方法是什么?
  2. 例题
  3. 最常见的错误是什么?
  4. 自测
  5. 接下来学什么?

追踪返回值(returned value)就是一行一行地跟着函数调用走到 RETURN,记录每个变量的值,并说明送回调用者的是什么。考试会给出一个函数和一次调用,要你写出返回值或输出。

本课属于程序结构模块。它会用到构建子程序中的参数,以及作用域中的局部变量。

追踪函数的方法是什么?

  1. **把调用的实参抄进形参。**写在第一行。
  2. **每个变量一列。**包括参数、局部变量和循环计数器。
  3. **按顺序执行每一行。**每当某个值改变,就新写一行。
  4. **在第一个被执行的 RETURN 处停止。**返回值就是那一刻 RETURN 所带的值。
  5. 说明调用者拿它做什么,例如输出。

例题

追踪下面的程序,写出输出。

FUNCTION RepeatAdd(A : INTEGER, B : INTEGER) RETURNS INTEGER
    DECLARE Result : INTEGER
    Result ← 0
    FOR I ← 1 TO B
        Result ← Result + A
    NEXT I
    RETURN Result
ENDFUNCTION

OUTPUT RepeatAdd(4, 3)

调用 RepeatAdd(4, 3) 使 A = 4、B = 3。循环在 I = 1、2、3 时各执行一次。

步骤ABIResult
调用43未设置未设置
Result ← 043未设置0
I = 14310 + 4 = 4
I = 24324 + 4 = 8
I = 34338 + 4 = 12
RETURN Result12

函数返回 12,主程序输出 12。这个函数把 A 重复相加 B 次,所以算的是 A × B。核对一下:4 × 3 = 12。

最常见的错误是什么?

错误的代码:

FUNCTION SumTo(N : INTEGER) RETURNS INTEGER
    DECLARE Total : INTEGER
    Total ← 0
    FOR I ← 1 TO N
        Total ← Total + I
        RETURN Total
    NEXT I
ENDFUNCTION

写代码的人以为 SumTo(4) 会返回 1 + 2 + 3 + 4 = 10。

RETURN 放在了循环里面。第一圈 I = 1,Total 变成 1,RETURN 立刻结束函数。所以 SumTo(4) 返回的是 1。

纠正方法是把 RETURN 移到 NEXT 之后、循环之外。这样循环会跑完四圈,Total 达到 1 + 2 + 3 + 4 = 10,返回 10。

第二个错误是调用了函数却不理会它的值。单独写一行 RepeatAdd(4, 3) 没有任何用处。应该把它存起来,例如 Answer ← RepeatAdd(4, 3),或者直接输出。

自测

1. 写出 RepeatAdd(5, 0) 返回的值。

显示答案

B 为 0,所以循环 FOR I ← 1 TO 0 一次也不会执行。Result 保持为 0,返回 0。

2. 写出 RepeatAdd(3, 4) 返回的值。

显示答案

四圈中 Result 依次是 0、3、6、9、12,所以返回 12。

3. 写出输出。

FUNCTION Larger(X : INTEGER, Y : INTEGER) RETURNS INTEGER
    IF X > Y THEN
        RETURN X
    ELSE
        RETURN Y
    ENDIF
ENDFUNCTION

OUTPUT Larger(7, 12)
显示答案

X = 7,Y = 12。判断 7 > 12 为 FALSE,所以执行 ELSE 分支并返回 Y。输出是 12。

接下来学什么?

当你能追踪函数送回的值之后,就该想想:除了返回值,函数还应该做什么、不应该做什么。这正是把逻辑与输入输出分开的主题。你可以用受限伪代码追踪训练器练习,它会显示表格的每一行,也可以对照安全 Python 推理沙盒。

有些学生会追踪,却在考试中时间不够,往往是缺一套固定的做法。一对一线上 Computer Science 老师可以根据你自己的试卷帮你建立这套做法。

常见问题

RETURN 到底做了什么?

RETURN 会立刻结束函数,并把一个值送回调用它的那一行。RETURN 之后的语句不会再执行。调用的代码随后可以保存这个值、输出它,或把它用在计算里。

答案看得出来,为什么还要写追踪表?

短函数往往藏着小错误,例如循环少跑了一次。追踪表逼你在每一步之后记录每个变量,让答案来自代码而不是猜测。阅卷时,正确的中间值也会得分。

如果函数没有执行到 RETURN 会怎样?

本应返回值的函数,在每一条可能的路径上都应该返回。如果某条路径没有 RETURN,调用者就得不到值,这是逻辑错误。读函数时请检查每个 IF 分支。

更新于:

下一步

如果你的追踪总是在循环中途出错,一对一老师可以看着你现场填表,在数值开始跑偏的那一行立刻叫停你。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生