对于我的作业,我得到了以下Pascal代码:
Program arraySum;
Procedure sum(a: Array [1..3] Of Integer);
Function sum2(low, high: Integer): Integer;
Var mid: Integer;
Begin
If low = high
Then sum2 := a[low]
Else Begin
mid := (low + high)/2;
sum2 := sum2(1, mid) {line 9}
+ sum2(mid + 1, high)
End
End;
Begin
Out("Result: ", sum2(1,3))
End;
Begin
sum([3,1,5])
End.
提出问题:
在递归调用中 SUM2 在第9行,是否有一个应该保存的寄存器值?如果 那么,该寄存器应该是调用者保存还是被调用者保存?解释你的答案。
问题是关于保存单个寄存器,但在查看代码之后我认为我需要保存两个寄存器,即中间和高位,因为第二次递归调用需要这些寄存器。除此之外,我会说这些是调用者保存,因为这些只是临时值。 我在这里做错了吗?