112年普考程式設計概要
二、根據以下 C 程式碼,回答下列問題:
(一)請問那一行是此遞迴程式的中止條件?(5分) (二)請說明第10行的輸出,以及其運作邏輯。(6分) (三)請說明第11行的輸出,以及其運作邏輯。(7分) (四)請說明函式 f 的主要功能,包含輸入參數與輸出結果的關係。(7分) |
答:
(一)那一行是此遞迴程式的中止條件?
此遞迴程式的中止條件是第三行 if (b == 1) return a;。當參數 b 的值為1時,遞迴呼叫將停止,函數返回當前的 a 值。
(二)第10行的輸出,以及其運作邏輯
1.運作邏輯:
(1)遞迴函數 f(a, b) 的運作邏輯是每次呼叫自己時,會把參數 b 減1,然後加上參數 a,然後再次呼叫 f(a, b-1)。當參數 b 變成1時,遞迴停止,並且回傳 a。
(2)對於 printf("%d\n", f(5, 3)); 的運作邏輯,說明如下:
a.首先,呼叫 f(5, 3)。因為 b 不等於1,所以執行 5+ f(5, 2)。
b.接著,在 f(5, 2) 中,因為 b 仍然不等於1,所以再次執行 5 + f(5, 1)。
c.在 f(5, 1) 中,這次 b 等於1,因此函數直接回傳 a,也就是5。
d.因此,f(5, 2) 會得到 5 + 5 = 10。
e.最後,f(5, 3) 會得到 5 + 10 = 15。
2.輸出結果:15。
(三)第11行的輸出,以及其運作邏輯
1.運作邏輯:
(1)遞迴函數 f(a, b) 的運作邏輯是每次呼叫自己時,會把參數 b 減1,然後加上參數 a,然後再次呼叫 f(a, b-1)。當參數 b 變成1時,遞迴停止,並且回傳 a。
(2)對於 printf("%d\n", f(0, 0)); 的運作邏輯,說明如下:
a.首先,呼叫 f(0, 0)。因為 b 不等於1,所以執行 5+ f(5, -1)。
b.接著,在 f(5, -1) 中,因為 b 仍然不等於1,所以再次執行 5 + f(5, -2)。
c.接著,在 f(5, -2) 中,因為 b 仍然不等於1,所以再次執行 5 + f(5, -3)。
d.因此,f(0, 0) 會無限循環。
2.輸出結果:無限循環。
(四)函式 f 的主要功能,包含輸入參數與輸出結果的關係
1.函式 f 是一個遞迴函式,它接受兩個整數作為輸入參數,分別為 a 和 b。
2.主要功能是從 b 減到1的過程中,將 a 的值累加。如果 b 等於 1,函式將停止遞迴並返回當前的 a 值。所以,當 b 大於 1 時,函式的輸出結果將等於 a 的值乘以 b。
3.當 b 等於0或小於0時,它的行為可能與一般期望的行為不符。
留言列表