遞歸--全排列問(wèn)題

? ????? 前置文章:遞歸算法:www.reibang.com/p/703069f3ba3f .

? ????? 遞歸問(wèn)題有兩個(gè)經(jīng)典的應(yīng)用:Fibonacci數(shù)列和漢諾塔問(wèn)題芦倒。我已經(jīng)在之前的文章里面講過(guò)坦敌,而除去這兩個(gè)問(wèn)題,還有一些問(wèn)題是能使用普通方式去求解正压,但是當(dāng)用遞歸的方式去解這道問(wèn)題的時(shí)候孩灯,會(huì)有種被醍醐灌頂?shù)母杏X:嗬,原來(lái)這道題還能這么做,真機(jī)智鳞骤。漢諾塔問(wèn)題也是這樣的一個(gè)問(wèn)題。

? ? ? ? 我要說(shuō)的就是這樣的一個(gè)問(wèn)題:全排列問(wèn)題黍判。全排列豫尽,非常簡(jiǎn)單的一種問(wèn)題,一個(gè)全排列的問(wèn)題你拿去到全國(guó)任一所高中顷帖,給一高三生拂募,讓他去解,基本都能給你做出來(lái)窟她,甚至不止一種方法:階乘陈症、全排列公式……當(dāng)然,這是全排列在數(shù)學(xué)上的造詣震糖,當(dāng)全排列來(lái)到算法录肯,來(lái)到程序界,就沒(méi)有這么優(yōu)美了吊说。

??????? 打個(gè)比方论咏,我現(xiàn)在手頭有四個(gè)水果:橙子优炬、蘋果、桃厅贪、梨蠢护。然后我要將這些水果給挨個(gè)排排隊(duì),我要選出排起來(lái)之后樣子最好看的一種組合养涮。

排排隊(duì)的水果

??????? 那現(xiàn)在問(wèn)題就來(lái)了葵硕,這些水果一共能有多少種排隊(duì)的方式。你拿去問(wèn)高中生贯吓,他會(huì)告訴你:這不就是排列組合嘛懈凹,A44,也就是4×3×2×1=24種排列方式悄谐,然后讓寫下這些排列方式介评,挨個(gè)挨個(gè)寫,24種爬舰,也不多们陆。那我現(xiàn)在水果不是4種了,我有10種水果要排序情屹,然后寫下排列的方式坪仇,那你慢慢寫吧:10*9*8*7*6*5*4*3*2*1=3628800種。那我好的解決方法就是寫一個(gè)程序屁商,打印烟很,讓電腦去做颈墅,我別用人了蜡镶,不然得累死個(gè)人。那我就寫一個(gè)程序給排隊(duì)了:

??????????? 四個(gè)水果問(wèn)題我直接用一般的解決方法給做:我先把蘋果放這恤筛,然后我拿梨放蘋果左面官还、右面各放一次,在這里我用數(shù)組記錄這個(gè)順序毒坛,然后用一個(gè)統(tǒng)計(jì)數(shù)記錄種數(shù)望伦。我梨和蘋果放到一起,這就兩種方式煎殷,我接著拿我的桃屯伞,我挨個(gè)位置放,這不就插空嘛豪直,我這桃放一次有三個(gè)位置劣摇,然后我給用數(shù)組記錄,三個(gè)水果放一塊了弓乙,我這六種方式了末融,然后我就放橙子了钧惧,我這放進(jìn)去,24種方式勾习,然后我先存到數(shù)組浓瞪,再給輸出。這種解決思路就是用排列組合的方式解決這問(wèn)題巧婶。我寫一套通用的方法乾颁,那我就甭管有多少水果了,反正能把答案輸出粹舵。

??????????? 但是钮孵,這樣解決這個(gè)問(wèn)題有效率嗎?我每插入一個(gè)水果眼滤,我不停的寫入數(shù)組巴席、移動(dòng)數(shù)據(jù),當(dāng)我水果太多的時(shí)候诅需,可能也就沒(méi)法解決了漾唉,為啥?數(shù)據(jù)操作太大堰塌,電腦宕機(jī)了赵刑。

??????????? 那這問(wèn)題咋整?考慮遞歸吧场刑。我要排這四個(gè)水果了般此,我現(xiàn)在感覺四個(gè)有點(diǎn)多,那我就排三個(gè)牵现,我先把蘋果放在第一個(gè)位置上铐懊,不管它了,然后我去排桃瞎疼、橙子科乎、梨去了。然后我就發(fā)現(xiàn)了贼急,我這三個(gè)水果也能精簡(jiǎn)茅茂,我把桃放第一個(gè)位置,我就排橙子和梨就行了太抓,等我排完這倆空闲,我再把橙子放到三個(gè)水果的第一個(gè),我在排梨和桃走敌,排完我把梨放第一個(gè)碴倾,然后排桃和橙子。這我把蘋果放到第一個(gè)位置的剩下的排序就解決了,那我再把桃放四個(gè)水果的第一個(gè)位置……這不就是遞歸嘛影斑,我四個(gè)水果的問(wèn)題能成為四個(gè)里面的一個(gè)水果和其他三個(gè)水果的排列問(wèn)題给赞。這思路就有了,解決方案就出來(lái)了矫户。

void parm(int list[],int k,int m) {

//構(gòu)成一次全排列片迅,將結(jié)果輸出

??????? if(k == m){??????????

??????????????? for (int i=0; i<=m ;i++)

??????????????????????? cout<< list[i]<<" ";

??????????????? cout<<endl;

??????? }

??????? else

//在數(shù)組里面產(chǎn)生元素k~m的全排列,也就是相當(dāng)于我把四個(gè)水果簡(jiǎn)化到三個(gè)水果

??????????????? for(int j=k; j<=m; j++){??????????????????????????????????

??????????????????????? swap( list[k], list[j] );

??????????????????????? perm( list, k+1, m );

??????????????????????? swap( list[k], list[j] );

???????? }

}

??????? 通過(guò)遞歸的方式,我就把我手里四個(gè)水果的排列給找出來(lái)了皆辽,而且做了這么一個(gè)程序柑蛇,那我以后不管有多少水果我都不怕了。

??????? 我這就挑出最好看的一種排列方式驱闷,我就要用這種方式拿著我的水果出去了耻台,我干嘛去,我拿水果喂兔子去空另。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盆耽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子扼菠,更是在濱河造成了極大的恐慌摄杂,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循榆,死亡現(xiàn)場(chǎng)離奇詭異析恢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)秧饮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門映挂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盗尸,你說(shuō)我怎么就攤上這事柑船。” “怎么了振劳?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵椎组,是天一觀的道長(zhǎng)油狂。 經(jīng)常有香客問(wèn)我历恐,道長(zhǎng),這世上最難降的妖魔是什么专筷? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任弱贼,我火速辦了婚禮,結(jié)果婚禮上磷蛹,老公的妹妹穿的比我還像新娘吮旅。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布庇勃。 她就那樣靜靜地躺著檬嘀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪责嚷。 梳的紋絲不亂的頭發(fā)上鸳兽,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音罕拂,去河邊找鬼揍异。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爆班,可吹牛的內(nèi)容都是我干的衷掷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柿菩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼戚嗅!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枢舶,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渡处,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后祟辟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體医瘫,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年旧困,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醇份。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吼具,死狀恐怖僚纷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拗盒,我是刑警寧澤怖竭,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站陡蝇,受9級(jí)特大地震影響痊臭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登夫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一广匙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恼策,春花似錦鸦致、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抗碰。三九已至,卻和暖如春绽乔,著一層夾襖步出監(jiān)牢的瞬間改含,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工迄汛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捍壤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓鞍爱,卻偏偏與公主長(zhǎng)得像鹃觉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睹逃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 本文有七千字沉填,閱讀大約需要占用你10分鐘時(shí)間疗隶。 好吧。翼闹。隨便寫的斑鼻,我也不知道會(huì)花多久看完。因?yàn)閷懙谋容^爛猎荠,而且只是...
    鍋與盆閱讀 8,087評(píng)論 5 36
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)坚弱。 張土汪:刷leetcod...
    土汪閱讀 12,743評(píng)論 0 33
  • 雖然React Native平臺(tái)已經(jīng)為我們封裝了大多數(shù)常用的控件,但總有一些我們需要的特殊控件,或者比較小眾的控件...
    immutable閱讀 2,853評(píng)論 4 6
  • 在廣東這地方,說(shuō)好也好关摇,說(shuō)壞也壞荒叶,因?yàn)樘鞖猓檬涫F(xiàn)在些楣,感冒了,又得買感冒藥宪睹,又得花錢愁茁,還好,一年只感冒三四次横堡,還算...
    王玉笙閱讀 176評(píng)論 0 0