阿摩線上測驗 登入

申論題資訊

試卷:103年 - 103 關務特種考試_四等_資訊處理:程式語言概要#24839
科目:程式語言
年份:103年
排序:0

申論題內容

四、試將下列階乘函數改以遞迴方式撰寫。(20 分) int fact(int n) { int i, result = 1; for (i = 1; i <= n; i=i+1) result = result * i; return result; }

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

int fact(int n) {

    if (n == 0) { // 0的階乘為1
        return 1;
    } else {
        return n * fact(n-1);
    }
}
詳解 提供者:hchungw

將階乘函數改以遞迴方式撰寫,可以將函數 fact 定義為在每次調用自身時計算當前數字與前一次結果的乘積。遞迴的基本思路是將問題分解為更小的子問題,直到達到基本情況(在本例中即為 n == 0 或 n == 1)。
以下是使用遞迴方式撰寫的階乘函數:
C++ 遞迴版階乘函數
cpp
複製程式碼
#include <iostream>
int fact(int n) {
    if (n <= 1) {
        return 1; // 基本情況
    } else {
        return n * fact(n - 1); // 遞迴調用
    }
}
int main() {
    int number;
    std::cout << "請輸入一個整數值: ";
    std::cin >> number;
    std::cout << "階乘結果: " << fact(number) << std::endl;
    return 0;
}
C# 遞迴版階乘函數
csharp
複製程式碼
using System;
class Program
{
    static int Fact(int n)
    {
        if (n <= 1)
        {
            return 1; // 基本情況
        }
        else
        {
            return n * Fact(n - 1); // 遞迴調用
        }
    }
    static void Main()
    {
        Console.Write("請輸入一個整數值: ");
        int number = int.Parse(Console.ReadLine());
        Console.WriteLine($"階乘結果: {Fact(number)}");
    }
}
程式解釋
基本情況:
當 n <= 1 時,返回 1。這是遞迴的終止條件,防止無限遞迴。
遞迴調用:
將 n 與 fact(n - 1) 的結果相乘,這會導致函數調用自身,直到達到基本情況。
主程式:
請使用者輸入一個整數值。
調用遞迴的 fact 函數計算該數的階乘。
輸出結果。
這樣,我們就成功地將原來的迴圈版本的階乘函數轉換成了遞迴版本。遞迴函數的實現更加直觀,直接反映了階乘的數學定義。