免費開始練習
普考申論題 114年 [資訊處理] 程式設計概要

第 一 題

📖 題組:
撰寫一個 Java 程式,使用遞迴計算給定正整數 n 的「卡塔蘭數」(Catalan Number)C(n),其中 C(n)定義為:C(0) = 1,C(n) = Σ(C(i) * C(n-1-i)) for i from 0 to n-1,使用者輸入 n(n 為非負整數且不超過 15)。輸出 C(n),並使用 long 型別。執行範例如下:例如 n 輸入 4,輸出 C(4) = 14。
4
C(4) = 14

import java.util.InputMismatchException;
import java.util.Scanner;
public class JP2 {
public static long catalan(int n) {
(A)
return sum;
}
public static void main(String[] args) {
Scanner scanner = (B)
int n;
try {
n = scanner.nextInt();
(C){
System.out.println("輸入不合法!");
scanner.close();
return;
}
} catch (InputMismatchException e) {
System.out.println("輸入不合法!");
scanner.close();
return;
}
(D)
System.out.println((E) + result);
scanner.close();
}
}
📝 此題為申論題,共 5 小題

小題 (一)

完成(A)程式碼(12 分)

思路引導 VIP

看到遞迴計算題,應優先確立「終止條件(Base case)」與「遞迴關係(Recursive case)」。本題需注意下方已有 return sum;,因此在填空處必須宣告 long sum = 0;,並利用 for 迴圈將題目給定的公式轉換為程式碼。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】將數學定義式轉換為遞迴函式,並確立終止條件與宣告正確的型別變數(long)。 【解答】 (A) 填空程式碼如下:

小題 (二)

完成(B)程式碼(3 分)

思路引導 VIP

觀察變數宣告型別為 Scanner,且後續程式碼使用 scanner.nextInt() 來接收使用者輸入。在 Java 中,要讀取控制台的標準輸入(鍵盤輸入),必須實例化 Scanner 物件並傳入 System.in 作為輸入串流。

🤖
AI 詳解
AI 專屬家教

new Scanner(System.in);

小題 (三)

完成(C)程式碼(3 分)

思路引導 VIP

看到此題,首先回顧題目對變數 n 的限制條件:「非負整數且不超過 15」。接著觀察 (C) 後的程式區塊為印出「輸入不合法!」並結束程式,可知此處需要一個 if 條件判斷式,用來捕捉小於 0 或大於 15 的不合法輸入值。

🤖
AI 詳解
AI 專屬家教

if (n < 0 || n > 15)

小題 (四)

完成(D)程式碼(4 分)

思路引導 VIP

觀察上下文,(D) 的上方剛完成變數 n 的讀取與合法性驗證,下方緊接著要印出包含 result 變數的計算結果。因此 (D) 處需宣告與 catalan 函式回傳值相同型態 (long) 的變數 result,並呼叫 catalan(n) 來計算答案。

🤖
AI 詳解
AI 專屬家教

long result = catalan(n);

小題 (五)

完成(E)程式碼(3 分)

思路引導 VIP

觀察執行範例的輸出格式為「C(n) = 計算結果」,並對照程式碼 System.out.println((E) + result);。由於 result 儲存最終計算數值,可知 (E) 需利用字串串接變數 n 來產生前半段的提示字串。

🤖
AI 詳解
AI 專屬家教

(E) 的正確程式碼為 "C(" + n + ") = " 【補充說明】 根據執行範例 C(4) = 14,且後方已串接變數 result,因此 (E) 必須負責輸出前綴字串。透過字串與整數變數 n 進行 + 運算子串接,可動態生成符合題目要求的輸出格式。

📝 卡塔蘭數與遞迴實作
💡 掌握遞迴公式轉程式碼、例外處理與基礎輸入輸出規範。

🔗 卡塔蘭數程式執行邏輯

  1. 1 輸入驗證 — 透過 Scanner 與 try-catch 排除非數字或範圍外輸入
  2. ↓
  3. 2 遞迴計算 — 依 C(n) = Σ C(i)*C(n-1-i) 邏輯進行自我呼叫與累計
  4. ↓
  5. 3 格式化輸出 — 將計算結果 long result 依範例要求印出至主機板
🔄 延伸學習:延伸學習:可思考如何使用 Memoization (記憶化) 優化遞迴效率
🧠 記憶技巧:VIP 會員可查看這題的記憶口訣與速記法
⚠️ 常見陷阱:VIP 會員可查看這題最常被誘答的陷阱整理
動態規劃 (Dynamic Programming) 遞迴時間複雜度分析 Java 異常處理機制

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點