C++階乘函數(遞迴)詳解

2020-07-16 10:04:43
遞回計算階乘函數將接收一個整數引數併計算其階乘。現在不妨用數學的例子來檢驗一個遞迴的應用。

在數學中,符號 n! 表示數位 n 的階乘。整數 n 的階乘被定義如下。

n! = 1 X 2 X 3 X … X n; 如果 n>0
n =1; 如果 n = 0

規則規定,當 n 大於 0 時,其階乘是從 1 到 n 的所有正整數的乘積。例如,6! 可以計算為 1X2X3X4X5X6。規則還規定了基本情況:0 的階乘是 1。

可以使用遞迴定義一個數的階乘,如下所示:

factorial(n) = n X fafactorial(n-1); 如果 n> 0
factorial(n) = 1; 如果 n = 0

這個遞迴定義的 C++ 實現語句如下:
int factorial(int num)
{
    if (num == 0) //基本情況返回1;
        return 1;
    else
        return num * factorial(num - 1);
}
來看一個顯示 3! 的值的程式,其語句如下:

cout << factorial(3) << endl;

第一次呼叫該函數時,num 被設定為 3,所以 if 語句將執行以下程式碼行:

return num * factorial(num - 1);

雖然這是一個 return 語句,但它並不會立即返回,這是因為在確定返回值之前,必須確定 factorial(num-1) 的值。該函數被遞回呼叫,直到第 4 次呼叫,其中的 num 引數將被設定為 0。圖 1 中直觀地說明了函數每次呼叫期間 num 的值和返回值。


圖 1 遞回階乘函數圖解