112年普考程式設計概要

二、根據以下 C 程式碼,回答下列問題:

1

2

3

4

5

6

7

8

9

10

11

12

#include <stdio.h>

int f(int a, int b){

    if (b == 1) return a;

    else {

        int value = a + f(a, b-1);

        return value;

    }

}

int main( ) {

    printf("%d\n", f(5, 3));

    printf("%d\n", f(0, 0));

}

    ()請問那一行是此遞迴程式的中止條件?(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時,它的行為可能與一般期望的行為不符。

arrow
arrow
    文章標籤
    普考程式設計概要
    全站熱搜
    創作者介紹
    創作者 jacksaleok 的頭像
    jacksaleok

    國考資訊處理工作室(高考二級資訊處理/高考三級資訊處理/調查局三等/關務人員三等/地方特考三等)

    jacksaleok 發表在 痞客邦 留言(0) 人氣()