將階乘函數改以遞迴方式撰寫,可以將函數 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 函數計算該數的階乘。
輸出結果。
這樣,我們就成功地將原來的迴圈版本的階乘函數轉換成了遞迴版本。遞迴函數的實現更加直觀,直接反映了階乘的數學定義。