思路:遞歸求階乘函數,如果輸入的參數等于1則返回1,否則返回n乘以該函數下次遞歸。
成都創新互聯于2013年開始,先為紅古等服務建站,紅古等地企業,進行企業商務咨詢服務。為紅古企業網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
參考代碼:
#includestdio.h
int?fun(int?n)
{
if(n==1||n==0)?return?1;//如果參數是0或者1返回1
return?n*fun(n-1);//否則返回n和下次遞歸的積
}
int?main()
{
int?n;
scanf("%d",n);
printf("%d\n",fun(n));
return?0;
}
/*
5
120
*/
分析下程序,階乘可以用遞歸做,也可以用循環做,這里就放上這兩種代碼了。
一.遞歸:
#include stdio.h
int f(int t)
{
if (t==1)
return 1;
else
return t*f(t-1);
}
int main()
{
printf("%d\n",f(10));
return 0;
}
程序分析:定義一個f函數,利用遞歸的特性,進行運算
10*f(9) = 10*9*f(8) …… 直到到1時返回1
得出結果:
二.循環:
#include stdio.h
int main()
{
int t1=1;
for(int i=10;i=1;i--)
{
t1 = t1*i;
}
printf("%d", t1);
return 0;
}
程序分析:直接用一個for循環進行自減即可完成,定義t1用于存儲結果
得出結果:
n的階乘,就是從1開始乘到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。
由這個概念,可以得出遞歸求階乘函數fact的算法:
1
如果傳入參數為0或1,返回1;
2
對于任意的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);
}
擴展資料:
return用法:
return返回一個數值的意思就是把returnlt;表達式gt;后面表達式的值返回給調用他的函數。舉個例子:
int sum(int i,int j)
{
return i+j;
printf("這個語句不會被執行,因為該子函數執行到上面的return語句就無條件結束了");
}
main()
{
int a=10,b=11,c;
c=sum(a,b);
printf("%d",c);
}
程序的輸出為:
21
這個21從何而來呢main函數調用sum(a,b)函數時將a的值賦給i,b的值賦給j,上面說了return i+j;會計算i+j的值也就是結果等于21,并將21帶回給調用它的函數,即c=sum(a,b);相當于c=21,這個21就是由sum(a,b)中的return反回來的。
#includestdio.h
void main()
{
long int jies(int a);
long int k,l,m;
printf("輸入要求階乘的三個數,用空格隔開\n");
scanf("%d%d%d",k,l,m);
long int sum;
sum=jies(k)+jies(l)+jies(m);
printf("sum=%d\n",sum);
}
long int jies(int a)
{
long int j;
if(a0)
printf("輸入有誤");
else if(a==1||a==0)
return 1;
else
j=a*jies(a-1);//遞歸算法
return j;
}
1、打開vc6.0,新建一個vc項目,添加頭文件,添加一個空的main函數,這里先定義一個用來求階乘的函數,函數的參數為i,階乘就是不斷的和前面的一個數相乘,這里就是不斷和fact函數相乘,之后編寫主函數的內容:
2、在main函數定義int類型變量sum,然后調用fact()將返回值賦予sum,最后使用printf打印sum的值:
3、最后編寫程序好后,來運行程序觀察結果,這里可以看到打印出了6的階乘。以上就是C語言用遞歸的方式求階乘的過程:
新聞標題:階乘相加的c語言遞歸函數,c語言遞歸求階乘
本文URL:http://vcdvsql.cn/article22/hspecc.html
成都網站建設公司_創新互聯,為您提供App開發、App設計、建站公司、網站制作、關鍵詞優化、ChatGPT
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯