舉一個(gè)用遞歸調(diào)用函數(shù)求輸入非負(fù)整數(shù)的階乘的例子,如下:
做網(wǎng)站、成都網(wǎng)站制作的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
int?fact(int?n){
if(n==1?||?n==0)?return?1;
else?return?n*fact(n-1);
}
int?main(void){
int?x;
while(1){
printf("Input?x(int?12=x=0)...\nx=");
if(scanf("%d",x),x=0??x=12)//x12時(shí)會(huì)使結(jié)果溢出
break;
printf("Error,redo:?");
}
printf("%d!?=?%d\n",x,fact(x));
return?0;
}
#include
#include
/*求n的
階乘
,遞歸,
分母
部分
*
結(jié)束條件為:1的階乘=1
*
遞歸時(shí),一定要有結(jié)束條件
*/
int
factorial
(n)
{
if(n==1)
//遞歸結(jié)束條件,1的階乘為1
return
1;
else
return
n*factorial(n-1);
//n的階乘為n乘以(n-1)!
}
int
main()
{
int
n,x;
size_t
i;
//i為
無符號(hào)整數(shù)
double
re=0;
printf("input
n
and
x:");
scanf("%d%d",n,x);
//輸入n和x的值
for(i=1;i=2*n-1;i+=2)
{
/*pow函數(shù)求的是x的i次方,分母為
i的
階乘。本部分可以優(yōu)化,因?yàn)閕的階乘算出來了,所以i+2的階乘就是i的階乘*(i+1)*(i+2),不用重復(fù)來計(jì)算階乘。自己可以試試*/
re
+=
pow(x,i)/factorial(i);
}
printf("\nn=%d\tx=%d\tresult=%f\n",n,x,re);//打印出
最后的結(jié)果
return
0;
}
漢諾塔算法, 一個(gè)柱子1上n個(gè)盤子套著,大的在下,借用柱子2,全部轉(zhuǎn)移到柱子3上
#include stdio.h
int main()
{
void hanoi(int n,char one,char two,char three); // 對(duì)hanoi函數(shù)的聲明
int m;
printf("input the number of diskes:");
scanf("%d",m);
printf("The step to move %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three) // 定義hanoi函數(shù)
// 將n個(gè)盤從one座借助two座,移到three座
{
void move(char x,char y); // 對(duì)move函數(shù)的聲明
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y) // 定義move函數(shù)
{
printf("%c--%c\n",x,y);
}
在hanoi調(diào)用hanoi就是遞歸了
遞歸主要元素:入口,遞歸和結(jié)束。在定義遞歸函數(shù)時(shí)將這三個(gè)元素考慮進(jìn)去就行;如: double callnext(int n)
{
if(n1) return callnext(n-1)+3;
else return 1;
}
int main()
{
int m;
scanf("%d",m);
printf("result=%f",callnext(m));
return 0;
}
入口:callnext(m);遞歸:if(n1) return callnext(n-1)+3中的callnext(n-1);結(jié)束:else return 1;整個(gè)執(zhí)行流程:callnext(m) 調(diào)用 callnext(m-1);callnext(m-1)調(diào)用callnext(m-1-1)。。。
callnext(2)調(diào)用callnext(1);callnext(1)=1;結(jié)束;
網(wǎng)頁名稱:c語言遞歸函數(shù)經(jīng)典例題 c語言遞歸函數(shù)的概念及用法
標(biāo)題來源:http://www.muchs.cn/article8/dohscip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站、域名注冊(cè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)