阿摩線上測驗 登入

申論題資訊

試卷:102年 - 102 專技高考_電子工程技師:電子計算機原理#43679
科目:計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)
年份:102年
排序:0

申論題內容

三、遞迴呼叫程序(recursive procedure)乃是一個程序直接或間接呼叫程序本身。階層 計算(factorialization)的程序,輸入(input)為一個正整數 N,而輸出(output) 為 1*2*…*N。例如,呼叫階層函數 factorial(5),會得到的回覆值為 1*2*3*4*5=120。 請分別以使用遞迴呼叫與不使用遞迴呼叫,來撰寫此階層計算程序的虛擬程式碼。 (20 分)

詳解 (共 1 筆)

詳解 提供者:hchungw

選擇使用哪種方法

  1. 使用遞迴呼叫

    • 優點:代碼簡潔,直接反映數學上的遞迴定義,易於理解。
    • 缺點:當 n 很大時,遞迴深度可能會導致堆棧溢出(stack overflow),且效率較低。
  2. 不使用遞迴呼叫

    • 優點:效率較高,不會有遞迴深度過大的問題,適合處理較大範圍的 n 值。
    • 缺點:代碼可能稍微複雜些,但仍然易於理解。

在實際應用中,通常會根據具體情況選擇使用哪種方法。如果確定 n 的範圍不大且希望代碼簡潔,遞迴方法是個不錯的選擇;如果需要處理大範圍的 n 值,則迴圈方法會更合適。

 
 
使用遞迴呼叫

function factorial_recursive(n):
    if n == 0:             // 基本情況:當 n 等於 0 時,階層為 1
        return 1
    else:                  // 遞迴情況:當 n 大於 0 時,計算 n * factorial(n - 1)
        return n * factorial_recursive(n - 1)
// 呼叫範例
result = factorial_recursive(5)
// 這將返回 120
 
 

不使用遞迴呼叫

function factorial_iterative(n):
    result = 1             // 初始化結果為 1
    for i = 1 to n:        // 從 1 到 n 進行迴圈
        result = result * i // 將當前結果乘以當前迴圈變量 i
    return result          // 返回計算結果
// 呼叫範例
result = factorial_iterative(5)
// 這將返回 120