編寫(xiě)用C語(yǔ)言實(shí)現(xiàn)的求n階階乘問(wèn)題的遞歸算法
代碼如下:
long int fact(int n)
{
int x;
long int y;
if(n<0)
{
printf(“error!”);
}
if(n==0)
return 1;
x=n-1;
y=fact(x);
return (n*y);
}
拓展閱讀:
特點(diǎn)
遞歸算法是一種直接或者間接地調(diào)用自身算法的過(guò)程。在計(jì)算機(jī)編寫(xiě)程序中,遞歸算法對(duì)解決一大類(lèi)問(wèn)題是十分有效的,它往往使算法的描述簡(jiǎn)潔而且易于理解。
遞歸算法解決問(wèn)題的特點(diǎn):
(1) 遞歸就是在過(guò)程或函數(shù)里調(diào)用自身。
(2) 在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。
(3) 遞歸算法解題通常顯得很簡(jiǎn)潔,但遞歸算法解題的運(yùn)行效率較低。所以一般不提倡用遞歸算法設(shè)計(jì)程序。
(4) 在遞歸調(diào)用的過(guò)程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開(kāi)辟了棧來(lái)存儲(chǔ)。遞歸次數(shù)過(guò)多容易造成棧溢出等。所以一般不提倡用遞歸算法設(shè)計(jì)程序。
要求
遞歸算法所體現(xiàn)的“重復(fù)”一般有三個(gè)要求:
一是每次調(diào)用在規(guī)模上都有所縮小(通常是減半);
二是相鄰兩次重復(fù)之間有緊密的聯(lián)系,前一次要為后一次做準(zhǔn)備(通常前一次的`輸出就作為后一次的輸入);
三是在問(wèn)題的規(guī)模極小時(shí)必須用直接給出解答而不再進(jìn)行遞歸調(diào)用,因而每次遞歸調(diào)用都是有條件的(以規(guī)模未達(dá)到直接解答的大小為條件),無(wú)條件遞歸調(diào)用將會(huì)成為死循環(huán)而不能正常結(jié)束。
【編寫(xiě)用C語(yǔ)言實(shí)現(xiàn)的求n階階乘問(wèn)題的遞歸算法】相關(guān)文章:
用C或者C++語(yǔ)言實(shí)現(xiàn)SOCKET通信12-14
用C語(yǔ)言實(shí)現(xiàn)文件讀寫(xiě)操作12-25
用C++編寫(xiě)程序?qū)崿F(xiàn)向右循環(huán)移位12-13
遞歸實(shí)現(xiàn)回文判斷12-27
經(jīng)典C語(yǔ)言面試算法題09-24
c語(yǔ)言指針面試常見(jiàn)問(wèn)題09-28
編寫(xiě)一個(gè)程序:輸入N,打印N*N矩陣12-20
圖像拼接算法及實(shí)現(xiàn)08-16