零基礎(chǔ)小白必學(xué)C語言經(jīng)典算法之一—遞歸算法

1.遞歸

一個(gè)函數(shù)自己直接或間接調(diào)用自己心例。

思想就是:將問題規(guī)模不斷縮小,化繁為簡翎卓,求n契邀!轉(zhuǎn)化成(n-1)!,再轉(zhuǎn)換成(n-2)摆寄!.......最后轉(zhuǎn)換成(1)!.

有如漢諾塔問題失暴,如果初始有10個(gè)砝碼坯门,要從A移動(dòng)到C,這個(gè)看起來比較復(fù)雜逗扒。只要把前9個(gè)移動(dòng)到B古戴,然后移

動(dòng)第10個(gè)到C。那這9個(gè)怎么移動(dòng)呢矩肩,也用這種方式现恼。。黍檩。這就是遞歸實(shí)現(xiàn)漢諾塔叉袍。

現(xiàn)在我們來看一個(gè)簡單的遞歸算法:C語言實(shí)現(xiàn)漢諾塔

遞歸算法的精髓是一層入一層,直至遇到滿足的結(jié)束語句刽酱,所以一般和遞歸在一起的是一些判斷語句喳逛。遞歸函數(shù)得要有終止語句。

遇到遞歸問題需要根據(jù)規(guī)律解決棵里。

(1)找到所謂的終止條件润文,即讓遞歸停止的條件

(2)找到遞推的關(guān)系式

(3)遞歸的方向要搞清楚,一般是向最終的終止條件不斷遞歸

(4)遞歸 分為回推和遞推兩個(gè)階段殿怜,當(dāng)遞推到終止條件時(shí)典蝌,程序會(huì)反向推回(回推)!M访铡?ハ啤!

用遞歸算法(recursion)計(jì)算階乘

codes:

/**************************************

*author: Yang Xu

*goals: compute factorial by recursion

***************************************/

#include

#include

int main()

{

/*print the result of factorial*/

printf("%d\n", f(5));

system("pause");

return 0;

}

int f(int n)

{

int x;

/*這里就不加關(guān)于負(fù)整數(shù)的判斷了*/

if(n==1||n==0)

x=1;

else

x=n*f(n-1);//the recursion

return x;

}

例題

有5個(gè)人坐在一起柱告,問第5個(gè)人多少歲砖织?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù)末荐,他說比第3個(gè)人大2歲侧纯。問第3個(gè)人,又說比第2人大兩歲甲脏。問第2個(gè)人眶熬,說比第1個(gè)人大兩歲。最后 問第1個(gè)人块请,他說是10歲娜氏。請(qǐng)問第5個(gè)人多大?

程序分析:

利用遞歸的方法墩新,遞歸分為回推和遞推兩個(gè)階段贸弥。要想知道第5個(gè)人歲數(shù),需知道第4人的歲數(shù)海渊,依次類推绵疲,推到第1人(10歲)哲鸳,再往回推。

#include

/*

* 請(qǐng)使用遞歸函數(shù)完成本題

* 小編已將正確代碼放在左側(cè)任務(wù)的“不知道怎么辦”里

* 小編希望各位童鞋獨(dú)立完成哦~

*/

//定義一個(gè)函數(shù)盔憨,傳送人員序號(hào)進(jìn)去徙菠,返回該序號(hào)員工的年齡。

int getAge(numPeople)

{

//定義返回的年齡

int age;

//如果是第1個(gè)人的時(shí)候郁岩,年齡為10歲

if(numPeople==1)

age=10; //這是回推墻婿奔,也就是結(jié)束遞歸的條件。

else

//還沒接觸到回推墻问慎,就自我調(diào)用萍摊,謂之遞歸。

age = getAge(numPeople-1)+2; //年齡等于上一個(gè)人的年齡加2

return age;

}

int main()

{

printf("第5個(gè)人的年齡是%d歲", getAge(5));

return 0;

}

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【?六四二如叼,一二零记餐,九一四 】,無論你是大牛還是小白薇正,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)片酝!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享挖腰!學(xué)習(xí)更多C/C++相關(guān)知識(shí)也可以去公眾號(hào)——“huainian_c”雕沿。

2. 善用遞歸:

使用遞歸有利有弊,有點(diǎn)自然是為某些問題提供了簡單的解決辦法猴仑,同時(shí)审轮,代碼看起來也很簡潔;而缺點(diǎn)也不容忽視辽俗,很多遞歸會(huì)很快耗盡計(jì)算機(jī)的內(nèi)部資源疾渣。分分鐘電腦死機(jī)。

正因?yàn)槿绱搜缕芏噙f歸我們都可以使用非遞歸來代替榴捡,比如下面我們求兩個(gè)整數(shù)的最大公約數(shù):

3.結(jié)束語

現(xiàn)在的程序設(shè)計(jì)追求的就是可讀性好,遞歸的算法看起來簡潔朱浴。隨著計(jì)算機(jī)性能的不斷提高吊圾,程序在更多的場合是優(yōu)先考慮可讀性,因此翰蠢,如果可以项乒,鼓勵(lì)使用遞歸優(yōu)先實(shí)現(xiàn)程序思想。

每天進(jìn)步一點(diǎn)點(diǎn)梁沧,每天消化一點(diǎn)點(diǎn)檀何。如果你有更高的想法,歡迎一起交流。如果覺得文章寫得還不錯(cuò)频鉴,點(diǎn)個(gè)贊唄栓辜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市砚殿,隨后出現(xiàn)的幾起案子啃憎,更是在濱河造成了極大的恐慌芝囤,老刑警劉巖似炎,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悯姊,居然都是意外死亡羡藐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門悯许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仆嗦,“玉大人,你說我怎么就攤上這事先壕〈穸螅” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵垃僚,是天一觀的道長集绰。 經(jīng)常有香客問我,道長谆棺,這世上最難降的妖魔是什么栽燕? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮改淑,結(jié)果婚禮上碍岔,老公的妹妹穿的比我還像新娘。我一直安慰自己朵夏,他們只是感情好蔼啦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仰猖,像睡著了一般询吴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亮元,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天猛计,我揣著相機(jī)與錄音,去河邊找鬼爆捞。 笑死奉瘤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盗温,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼藕赞,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了卖局?” 一聲冷哼從身側(cè)響起斧蜕,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砚偶,沒想到半個(gè)月后批销,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡染坯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年均芽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片单鹿。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掀宋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仲锄,到底是詐尸還是另有隱情劲妙,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布儒喊,位于F島的核電站镣奋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澄惊。R本人自食惡果不足惜唆途,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掸驱。 院中可真熱鬧肛搬,春花似錦、人聲如沸毕贼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鬼癣。三九已至陶贼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間待秃,已是汗流浹背拜秧。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留章郁,地道東北人枉氮。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓志衍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聊替。 傳聞我的和親對(duì)象是個(gè)殘疾皇子楼肪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容