什麼是回傳值

函式結束處理時回傳給呼叫端的值。在虛擬碼中,寫在 return 之後的式子的值就是回傳值,執行 return 的時點函式的處理就結束。

日文名稱: 戻り値

「回傳值」出現在7領域的16道練習題中(程式設計基礎(虛擬碼追蹤), 指令集與組合語言, C語言基礎等)。

這個名詞所屬的領域: 程式設計基礎(虛擬碼追蹤)

練習回傳值的題目

在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?

  1. A引數是s0~s7,回傳值是ra
  2. B引數是a0~a7,回傳值是a0(及a1)
  3. C引數全部放在堆疊,回傳值是sp
查看答案與解析

正確答案:B. 引數是a0~a7,回傳值是a0(及a1)

在RISC-V的標準呼叫慣例中,整數引數最多8個放入a0~a7(x10~x17)來傳遞,回傳值放在a0,RV32上64位元的值等則放入a0與a1兩個暫存器回傳。因為是以比記憶體更快的暫存器傳遞,所以函式呼叫的負擔較小。超過8個的引數放在堆疊上。浮點數的引數使用fa0~fa7。

函數 f(x, y) 定義為「若 y 為0則回傳 x,否則回傳 f(y, x mod y)」。呼叫 f(84, 36) 時的回傳值,以及 f 被呼叫的次數(含第一次呼叫)的組合為下列何者?

  1. A回傳值12,呼叫3次
  2. B回傳值12,呼叫4次
  3. C回傳值6,呼叫3次
查看答案與解析

正確答案:A. 回傳值12,呼叫3次

f(84, 36) 因 84 mod 36 = 12 而呼叫 f(36, 12),又因 36 mod 12 = 0 而呼叫 f(12, 0),由於 y 為0,回傳12。呼叫為 f(84, 36)、f(36, 12)、f(12, 0) 共3次,這就是以輾轉相除法(歐幾里得演算法)求最大公因數的計算。此函數直接回傳遞迴呼叫結果,屬於尾端遞迴,若編譯器進行尾端呼叫最佳化就能轉換成迴圈,即使呼叫很深也不會持續消耗堆疊。

解析中的「回傳值」

出現「回傳值」的題目(16題)

  1. 在RISC-V的標準呼叫慣例中,下列何者是用於傳遞整數引數與回傳值的暫存器?
  2. 函數 f(x, y) 定義為「若 y 為0則回傳 x,否則回傳 f(y, x mod y)」。呼叫 f(84, 36) 時的回傳值,以及 f 被呼叫的次數(含第一次呼叫)的組合為下列何者?
  3. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 f(9087) 呼叫下列函式 f 時,回傳值為下列何者?
  4. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 toBin(12) 呼叫下列函式 toBin 時,回傳值為下列何者?
  5. 以 s(7) 呼叫下列函式 s 時,回傳值為下列何者?
  6. 以 fib(10) 呼叫下列函式 fib 時,回傳值為下列何者?
  7. 連續呼叫上方的函式 f 三次時,第3次的回傳值為下列何者?
  8. 下列何者是制定呼叫慣例(calling convention)的主要目的?
  9. 在程式的錯誤中,下列何者能在編譯時就被發現?
  10. 關於C語言程式中作業系統最初開始執行的位址(進入點,entry point),下列何者正確?
  11. C語言的main函式以「return 3;」結束時,該值3一般會如何處理?
  12. 在CUDA中,GPU 核心函式(GPU kernel)是加上__global__的函式。CPU端的程式接收其計算結果的方法,下列何者正確?
  13. 在每個執行緒區塊(Thread block)的執行緒數上限為1024的GPU上,將blockDim.x設為2048來啟動CUDA的核心函式。一般會發生什麼情況?
  14. ÷ 為除法,代入整數型變數(含引數)時捨去小數部分。以 pow(2, 10) 呼叫下列函式 pow 時,pow 被呼叫的次數(含第一次呼叫)為下列何者?
  15. 以 c(4, 2) 呼叫下列函式 c 時,c 被呼叫的次數(含第一次呼叫)為下列何者?

相關名詞

引數 堆疊 變數 取餘運算 遞迴 呼叫慣例 CUDA GPU 核心函式(GPU kernel) GPU 陣列

前往名詞解釋列表