對於C/C++初學者來說,可能會經常遇到如計算階乘等問題。對於計算階乘,一般人可能很輕易的就掌握了利用定義和循環來解決。但在博大精深的編程世界裡,還有很多種實現階乘的方法:如調用函數,利用遞歸,利用靜態變量等等,掌握了這些,你的程序將更加優雅,更加高逼格~祝大家C語言學習愉快。
工具/原料
我是在VS2012上編寫運行的,但C標準是一致的,其他的編譯器也不會有問題
方法/步驟
第一種:利用定義和for循環
試驗:輸入8,結果:8!=40320
程序代碼如下:
//=======================
//原1.c
//利用定義實現階乘
//-----------------------
#include
main()
{
int n,m=1,pro=1;//pro,即product,乘積
printf("Input n:");
scanf("%d",&n);
for(;m<=n;++m)
pro=pro*m;
printf("%d!=%d\n",n,pro);
}//===========================
第二種:調用函數
在C語言的模塊設計中,可以利用定義和循環,設計一個專門計算階乘的函數
fact(int),這樣設計,以後如果遇到計算階乘問題,可以直接套用函數,十分方便。
試驗:輸入 9,結果:9!=362880
程序代碼如下:
//=======================
//原2.c
//調用函數實現階乘
//-----------------------
#include
main()
{
int n;
int fact(int);//實現階乘的函數
printf("Input n:");
scanf("%d",&n);
printf("%d!=%d\n",n,fact(n));
}
int fact(int n)
{
int pro=1;
int m=1;
for(;m<=n;++m)
pro=pro*m;
return(pro);
}//===========================
第三種,遞歸計算
在第二種調用函數的思想下,我們改進算法,利用遞歸運算,思路立馬脫離了循環的桎梏
試驗:輸入10,結果:10!=3628800
程序代碼如下:
//=======================
//原3.c
//利用遞歸實現階乘
//-----------------------
#include
main()
{
int n;
int fact(int);//實現階乘的函數
printf("Input n:");
scanf("%d",&n);
printf("%d!=%d\n",n,fact(n));
}
int fact(int n)
{
int pro;//pro,即product,乘積,
if(n<=1)
pro=1;
else
pro=n*fact(n-1);
return(pro);
}//===========================
第四種,利用靜態變量實現階乘
如果我們在C語言的學習更加深入一點,我們還會了解到靜態變量(static)的特點,這時候利用靜態變量實現階乘也是別開生路。
試驗:輸入11,結果11!=39916800
程序代碼如下:
//=======================
//原4.c
//利用靜態變量實現階乘
//-----------------------
#include
main()
{
int n,m=1,pro;
long fact(int);//實現階乘的函數
printf("Input n:");
scanf("%d",&n);
for(;m<=n;m++)
pro=fact(m);
printf("%d!=%ld\n",n,pro);
}
long fact(int n)
{
static long pro=1;//pro,即product,乘積,
pro=pro*n;
return(pro);
}//===========================