1、打開(kāi)VC6.0軟件,新建一個(gè)C語(yǔ)言的項(xiàng)目:
10年積累的成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有任城免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
2、接下來(lái)編寫主程序,首先定義用來(lái)求階乘的遞歸函數(shù)以及主函數(shù)。在main函數(shù)里定義變量sum求和,調(diào)用遞歸函數(shù)fact(),并將返回值賦予sum,最后使用printf打印sum的結(jié)果,主程序就編寫完了:
3、最后運(yùn)行程序,觀察輸出的結(jié)果。以上就是C語(yǔ)言使用遞歸求階乘的寫法:
n的階乘,就是從1開(kāi)始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)!
*
n。
由這個(gè)概念,可以得出遞歸求階乘函數(shù)fact的算法:
1
如果傳入?yún)?shù)為0或1,返回1;
2
對(duì)于任意的n,返回n*fact(n-1)。
代碼如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}
舉例:用遞歸方法求n;
#includestdio.h
int main()
{
int n;
int y;
printf("input a integer number:");
scanf("%d",n);
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n)
{
int f;
if(n0)
printf("n0,data error!");
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
擴(kuò)展資料:
return用法:
return返回一個(gè)數(shù)值的意思就是把returnlt;表達(dá)式gt;后面表達(dá)式的值返回給調(diào)用他的函數(shù)。舉個(gè)例子:
int sum(int i,int j)
{
return i+j;
printf("這個(gè)語(yǔ)句不會(huì)被執(zhí)行,因?yàn)樵撟雍瘮?shù)執(zhí)行到上面的return語(yǔ)句就無(wú)條件結(jié)束了");
}
main()
{
int a=10,b=11,c;
c=sum(a,b);
printf("%d",c);
}
程序的輸出為:
21
這個(gè)21從何而來(lái)呢main函數(shù)調(diào)用sum(a,b)函數(shù)時(shí)將a的值賦給i,b的值賦給j,上面說(shuō)了return i+j;會(huì)計(jì)算i+j的值也就是結(jié)果等于21,并將21帶回給調(diào)用它的函數(shù),即c=sum(a,b);相當(dāng)于c=21,這個(gè)21就是由sum(a,b)中的return反回來(lái)的。
#include?stdio.h
int?fun(int?n){
int?k;
if(n==0)?k=1;
else?k=n*fun(n-1);
return?k;
}
//以上為運(yùn)用遞歸求階乘的函數(shù),以下為主函數(shù)
void?main()
{
int?n;
scanf("%d",n);
printf("%d!=%d",n,fun(n));
}
運(yùn)行示例: