程式設計基礎(虛擬碼追蹤)
以 p(3) 呼叫下列程序 p 時,輸出的值的順序為下列何者?
○p(整數型: n)
if (n > 0)
p(n − 1)
輸出 n
p(n − 1)
endif
- A1, 1, 2, 1, 1, 2, 3
- B3, 2, 1, 1, 2, 1, 1
- C1, 2, 1, 3, 1, 2, 1
查看答案與解析
正確答案:C. 1, 2, 1, 3, 1, 2, 1
p(1) 依序執行 p(0)、輸出1、p(0),因此只輸出「1」。p(2) 依序為 p(1)、輸出2、p(1),得到「1, 2, 1」。p(3) 為 p(2) 的「1, 2, 1」、輸出3、再一次 p(2) 的「1, 2, 1」,得到 1, 2, 1, 3, 1, 2, 1。輸出共 2³ − 1 = 7 個,與3個圓盤的河內塔中移動圓盤編號的順序相同。
- A. 這是在兩次遞迴呼叫之後才輸出時的順序。
- B. 這是在遞迴呼叫之前輸出時的順序。
- C. 正確。依序為 p(2) 的輸出、3、p(2) 的輸出。