阿摩線上測驗 登入

申論題資訊

試卷:103年 - 103年高等三級暨普通考普通_資訊處理#29119
科目:程式設計
年份:103年
排序:0

題組內容

一、請完成下述程式片段。

申論題內容

2.請撰寫單一遞迴函數(single recursive function)check 以判斷所給之正整數為奇 數或偶數,若為奇數回傳 FALSE,若為偶數回傳 TRUE。請扼要解說程式之正確 性。(15 分)

詳解 (共 2 筆)

詳解 提供者:hchungw

在 Java 中,可以使用遞迴函數來判斷一個正整數是奇數還是偶數。下面是一個簡單的遞迴函數 check,它能夠做到這點:

public class EvenOddCheck {
    public static boolean check(int n) {
        // Base case: if n is 0, it's even, return true
        if (n == 0) return true;
        // Base case: if n is 1, it's odd, return false
        else if (n == 1) return false;
        // Recursive step: call the function with n-2
        else return check(n - 2);
    }
    public static void main(String[] args) {
        // Example usage:
        int number = 5;
        System.out.println("Is " + number + " even? " + check(number));
    }
}
這個遞迴函數 check 的正確性基於以下幾點:
它有兩個基礎情況:當 n 等於 0 時(偶數的定義是可以被 2 整除,0 符合這一條件),函數返回 true;當 n 等於 1 時(奇數的定義是除以 2 餘 1,1 符合這一條件),函數返回 false。
遞迴步驟是減少 2,這樣做的原因是偶數減去 2 仍然是偶數,奇數減去 2 仍然是奇數。所以這樣遞迴下去最終一定會到達基礎情況。
因為每次遞迴都是確保 n 每次減少 2,所以這個遞迴函數一定會終止。當 n 是正整數時,最終 n 會變為 0 或 1,這時遞迴結束。
請注意,這個函數只對正整數有效,對於負整數或非整數值,這個函數需要進行相應的調整。此外,這個函數在 n 非常大時可能會遇到棧溢出問題,因為 Java 的遞迴調用會消耗調用棧空間。在實際應用中,直接使用 n % 2 == 0 會是一個更簡單且效率更高的方法來檢查一個數是奇數還是偶數。
詳解 提供者:114年高考上榜

bool check(unsigned int n) {

    if (n == 0) {
        return true; // 0 為偶數
    } else {
        return !check(n-1);
    }
}