阿摩線上測驗 登入

申論題資訊

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

題組內容

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

申論題內容

(二)請將 findnum()函式改寫成非遞迴的函式。 (10 分)

詳解 (共 2 筆)

詳解 提供者:aabb177

int findnum (int i,int num){
    for (i ; i<items ; i++){
        if (num <price[i])
            num = price[i];
    }
    
    return num;
}

詳解 提供者:hchungw
要將 findnum() 函式改寫成非遞迴的函式,我們可以使用一個循環來遍歷 price 陣列中的元素。以下是用 C 語言改寫的非遞迴版本的 findnum() 函式:
c
Copy code
int findnum(int num) {
    int i, found = -1;
    for (i = 0; i < items; i++) {
        if (num < price[i]) {
            if (found == -1 || price[i] < price[found]) {
                found = i;
            }
        }
    }
    return found != -1 ? price[found] : -1; // 如果找到適合的值就返回,否則返回 -1 表示沒有找到
}
這個函式逐一檢查每個元素,只有當該元素大於 num 時才考慮它。如果找到這樣的元素,函式會檢查是否已經找到了一個元素(found != -1),如果已經找到了,它會比較目前找到的元素和新元素,保留較小的那個。如果到最後都沒有找到任何元素(found 仍為 -1),則函式返回 -1,表示沒有找到任何大於 num 的元素。
請注意,為了讓這段代碼能夠正常運作,items 和 price 變數必須在此函式的作用域內可見,例如它們可以是全局變數,或者你可以將它們作為參數傳遞給 findnum 函式。