要將 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 函式。