阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 地方政府特種考試_四等_資訊處理:程式設計概要#118364
科目:程式設計
年份:112年
排序:0

題組內容

一、撰寫遞迴函式是重要程式設計技巧之一。

申論題內容

(四)請將 convert()函式改寫成以遞迴運算的函式,且函式內不可新增變數。 (10 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
要將 convert() 函式改寫為使用遞迴而不新增任何變數的函式,我們可以讓函式在每次遞迴呼叫時處理輸入數字的最低位。下面是使用遞迴實現 convert() 函式的 C 語言代碼:
c
Copy code
#include <stdio.h>
void convert(long m) {
    if (m > 0) {
        convert(m / 2); // 遞迴調用,先處理除以 2 的商
        printf("%ld", m % 2); // 然後處理餘數,也就是當前的最低位二進制數
    }
}
int main() {
    long m;
    scanf("%ld", &m);
    printf("The binary value is: ");
    if (m == 0) { // 處理 m 為 0 的特殊情況
        printf("0");
    } else {
        convert(m);
    }
    printf("\n");
    return 0;
}
在這個改寫的 convert() 函式中,我們沒有新增任何變數。如果 m 大於 0,我們先遞迴地調用 convert() 來處理 m 除以 2 的商,這樣可以保證最高位的二進制位先被處理。一旦到達遞迴的底部(當 m 變為 0 時),遞迴開始返回,並在每次返回的過程中打印出當前 m 對 2 取餘數的結果,也就是當前位的二進制值。
main 函式中有一個條件判斷,用於處理當輸入的數字為 0 時的特殊情況。這是必要的,因為如果輸入為 0,convert() 函式將不會打印任何東西,所以我們需要直接打印出 "0"。