首先明確題目要求:遞歸函數(shù),求n!
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)拉孜,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
遞歸函數(shù)的含義:
編程語言中,函數(shù)Func(Type a,……)直接或間接調(diào)用函數(shù)本身,則該函數(shù)稱為遞歸函數(shù)。
n!表示階乘函數(shù),即1*2*3*……*n
下面給出代碼:(C語言實現(xiàn)?)
比較簡單的尾遞歸實現(xiàn):
#includestdio.h
long?digui(int?n);??//遞歸函數(shù)聲明
int?main()
{
int?n;??
scanf("%d",n);
printf("the?result?is?%ld",digui(n));?//打印出遞歸值
return?0;
}
long?digui(int?n)??//遞歸函數(shù)部分
{
if(n1)???
return?n*digui(n-1);???//調(diào)用遞歸,讓n與n-1相乘,直到n1時
return?1;???//n1時,返回1,實現(xiàn)?n*(n-1)*(n-2)*……*3*2*1
}
long?ff(int?n)???????//函數(shù)作用是計算N的階乘????????????????????
{?
long?f;
if(n0)printf("n0,input?error");//n不能為負數(shù)
else?if(n==0||n==1)f=1;//這里使ff(0)和ff(1)等于1
else?f=ff(n-1)*n;//這里使ff(n)?=?n?*?ff(n-1),重要,因為當形參n?=?n-1時,ff(n-1)?=?ff(n-2)?*?(n-1),所以這一步實際實現(xiàn)了n階乘計算,即ff(n)?=?n?*?ff(n-1)?=?n?*?(n-1)?*?ff(n-2).....*ff(1)?*ff(0),因為ff(0)?==?ff(1)?==?1.所以ff(n)?=?n!實現(xiàn)。
return(f);
}
由于對于任意的n,
n! = (n-1)! * n;
即令f(n) = n!,存在公式
f(n) ?= f(n-1) * n;
在這個遞歸公式下,編寫遞歸求階乘代碼如下:
int?fac(int?n)
{
if(n?==?0?||?n?==?1)?return?1;
return?fac(n-1)*n;
}
#include stdio.h
int Func(int n)
{
if(n 2)
return 1;
else
return n*Func(n-1);
}
int main()
{
int n = 5;
printf("n! = %d\n",Func(n));
return 0;
}
執(zhí)行過程:
-》Func(5)
-》5*Func(4)
-》5*(4*Func(3))
-》5*(4*(3*Func(2))))
-》5*(4*(3*(2*Func(1))))
當n為0的時候停止遞歸,返回結(jié)果
由于遇到1的時候返回1,那么Func(1)=1
所以結(jié)果是5*(4*(3*(2*1))) = 120
int fac(int n)
{
long fact;
if (n == 1)
fact = 1;
else //加上這個
fact = fac(n-1)*n;
return fact;
}