#include stdio.h
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供西鄉(xiāng)塘網(wǎng)站建設(shè)、西鄉(xiāng)塘做網(wǎng)站、西鄉(xiāng)塘網(wǎng)站設(shè)計、西鄉(xiāng)塘網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、西鄉(xiāng)塘企業(yè)網(wǎng)站模板建站服務(wù),10多年西鄉(xiāng)塘做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
#include math.h
void fun2(int m)
{
int k=0,a[10];
for(int i=2;im;i++)
if(m%i==0)
a[k++]=i;
for(int i=0;ik;i++)
{
printf("%d",a[i]);
if(i!=k-1)
printf(",");
}
}
void fun1(int m)
{
if(m2)
printf("%d is a prime number",m);
for(int i=2;i*i=m;i++)
if(m%i==0)
fun2(m);
else
printf("%d is a prime number",m);
}
int main( )
{ int n;
scanf("%d",n);
fun1(n);
return 0;
}
用遞歸法計算n!
用遞歸法計算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n1)
按公式可編程如下:
long ff(int n)
{
long f;
if(n0) printf("n0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",n);
y=ff(n);
printf("%d!=%ld",n,y);
}
程序中給出的函數(shù)ff是一個遞歸函數(shù)。主函數(shù)調(diào)用ff 后即進入函數(shù)ff執(zhí)行,如果n0,n==0或n=1時都將結(jié)束函數(shù)的執(zhí)行,否則就遞歸調(diào)用ff函數(shù)自身。由于每次遞歸調(diào)用的實參為n-1,即把n-1的值賦予形參n,最后當(dāng)n-1的值為1時再作遞歸調(diào)用,形參n的值也為1,將使遞歸終止。然后可逐層退回。
下面我們再舉例說明該過程。設(shè)執(zhí)行本程序時輸入為5,即求5!。在主函數(shù)中的調(diào)用語句即為y=ff(5),進入ff函數(shù)后,由于n=5,不等于0或1,故應(yīng)執(zhí)行f=ff(n-1)*n,即f=ff(5-1)*5。該語句對ff作遞歸調(diào)用即ff(4)。
進行四次遞歸調(diào)用后,ff函數(shù)形參取得的值變?yōu)?,故不再繼續(xù)遞歸調(diào)用而開始逐層返回主調(diào)函數(shù)。ff(1)的函數(shù)返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最后返回值ff(5)為24*5=120。
#include?stdio.h
#include?stdlib.h
int?count=0;
int?fun(int?x,int?n)
{
count++;
if(n==2)
{
return?x*x;
}
else?if(n%2==0)
{
return?fun(x,n/2)*fun(x,n/2);
}
else?if(n%2==1)
{
return?fun(x,n-1)*x;
}
}
int?main(int?argc,?char?*argv[])?{
int?sum=0,x,n;
printf("請輸入x?n的值(兩數(shù)之間用空格間隔):");
scanf("%d?%d",x,n);
sum=fun(x,n);
printf("%d??遞歸調(diào)用了%d次",sum,count);
return?0;
}
本文標(biāo)題:c語言遞歸公式求函數(shù)的值 c語言遞歸函數(shù)怎么寫
URL分享:http://muchs.cn/article36/doeodsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、用戶體驗、網(wǎng)站制作、響應(yīng)式網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)