程式設計基礎(虛擬碼追蹤)

以 p(3) 呼叫下列程序 p 時,輸出的值的順序為下列何者?

○p(整數型: n)
  if (n > 0)
    p(n − 1)
    輸出 n
    p(n − 1)
  endif
  1. A1, 1, 2, 1, 1, 2, 3
  2. B3, 2, 1, 1, 2, 1, 1
  3. 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) 的輸出。
練習這個領域 前往領域頁面

相關計算工具

程式設計基礎(虛擬碼追蹤)的其他題目

  1. 以 fib(10) 呼叫下列函式 fib 時,回傳值為下列何者?
  2. 以 c(4, 2) 呼叫下列函式 c 時,c 被呼叫的次數(含第一次呼叫)為下列何者?
  3. ⊕ 表示逐位元的互斥或。執行下列程式後 x 與 y 的值為下列何者?
  4. x 與 y 為8位元的無號整數。<< 與 >> 為邏輯移位,空出的位元補0,超出8位元的位元捨棄。∨ 表示逐位元的邏輯或。執行下列程式後 y 的值為下列何者?
  5. ∧ 表示逐位元的邏輯與。執行下列程式後 c 的值為下列何者?