遞迴計算階乘函式將接收乙個整數引數並計算其階乘。現在不妨用數學的例子來檢驗乙個遞迴的應用。
在數學中,符號 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 遞迴階乘函式**
下面的程式演示了 factorial 函式的使用:
// this program demonstrates a recursive function
// to calculate the factorial of a number.
#include
using namespace std;
// function prototype
int factorial(int);
int main()
int number;
cout << "enter an integer value and i will display\n";
cout << "its factorial: ";
cin >> number;
cout << "the factorial of " << number << " is ";
cout << factorial (number) << endl;
return 0;
int factorial(int num)
if (num == 0) //base case
return 1;
else
return num * factorial(num - 1);
程式輸出結果:
enter an integer value and i will display
its factorial: 4
the factorial of 4 is 24
階乘函式n!
include stdafx.h include iostream using namespace std int factorial int n if 0 n return 1 else r eturn n factorial n 1 int main int argc,char argv int...
048 計算階乘函式
計算階乘 fact.asm include irvine32.inc code main proc push 5 計算5!將引數儲存在棧中 call factorial 計算階乘 eax call writedec 顯示結果 call crlf call waitmsg exit main endp...
演算法筆記 階乘函式
1 階乘函式 遞迴 int recursionfactorial int n 階乘函式 遞迴 2 階乘函式 迴圈 int circulationfactorial int n 階乘函式 迴圈 3 測試函式 include intrecursionfactorial int n 階乘函式 遞迴 int...