摘要:漢諾塔問(wèn)題描述有三個(gè)圓柱,其中上從上至下放置了從小到大個(gè)圓盤,一次只能移動(dòng)一個(gè)圓盤,且大的圓盤不能放在小圓盤之上,要求打印出從將圓盤移到的方案。
漢諾塔問(wèn)題描述:有A, B, C三個(gè)圓柱,其中A上從上至下放置了從小到大n個(gè)圓盤,一次只能移動(dòng)一個(gè)圓盤,且大的圓盤不能放在小圓盤之上,要求打印出從A將圓盤移到C的方案。
當(dāng)n = 1時(shí), A->C
當(dāng)n = 2時(shí), A->B, A->C, B->C
當(dāng)n = 3時(shí), [A->C, A->B, C->B,] A->C,[B->A, B->C, A->C]
當(dāng)n = 4時(shí), A->B, A->C, B->C, A->B, C->A, C->B, A->B,
A->C, B->C, B->A, C->A, B->C, A->B, A->C, B->C
當(dāng)n = 5時(shí), A->C, A->B, C->B, A->C, B->A, B->C, A->C,
A->B, C->B, C->A, B->A, C->B, A->C, A->B, C->B A->C, B->A, B->C, A->C, B->A, C->B, C->A, B->A, B->C, A->C, A->B, C->B, A->C, B->A, B->C, A->C
當(dāng)n > 2時(shí),第n項(xiàng),[A->B],A->C,[B->C]
第n-1項(xiàng),A->B [A->C],A->B,[C->B] B->C [B->A],B->C,[A->C] 第n-1-1項(xiàng), 第n-1項(xiàng),A->C(此處的C應(yīng)該是B),A->C,和第n-1-1項(xiàng),A->B(此處的B應(yīng)是C),B->C …… 如此重復(fù),可以用遞歸求得結(jié)果
由此,不難看出,計(jì)算n個(gè)圓盤,所需要的次數(shù)為f(n) = 2*f(n-1)+1
代碼:
const move=(a,c)=>{ console.info(`${a}->${c}`) } const hanoi = (n,a,b,c)=>{ if(n === 1){ move(a,c) }else{ //[A->B] hanoi(n-1,a,c,b); move(a,c); //[B->C] hanoi(n-1,b,a,c); } }
參考:從fibonacci和漢諾塔看分治法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88905.html
摘要:應(yīng)用分治法是一種很重要的算法。字面上的解釋是分而治之,就是把一個(gè)復(fù)雜的問(wèn)題分成兩個(gè)或更多的相同或相似的子問(wèn)題,再把子問(wèn)題分成更小的子問(wèn)題直到最后子問(wèn)題可以簡(jiǎn)單的直接求解,原問(wèn)題的解即子問(wèn)題的解的合并。 ...
摘要:漢諾塔問(wèn)題有三根柱子,源桿,暫存桿,目的桿上有層盤子,由小到大向下排列,現(xiàn)需要將桿的盤子移到桿中要求大的盤在下面,小的盤在上面一次只能移動(dòng)一個(gè)盤子個(gè)人思路先分析問(wèn)題,用數(shù)學(xué)的歸納法當(dāng)只有一個(gè)盤時(shí),直接移動(dòng)當(dāng)有兩個(gè)盤時(shí),先將小的移到暫存桿,再 漢諾塔問(wèn)題: 有三根柱子,源桿A,暫存桿temp,目的桿C A上有n層盤子,由小到大向下排列,現(xiàn)需要將A桿的盤子移到C桿中 ...
摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來(lái)一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)sho...
摘要:學(xué)編程,學(xué),算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。當(dāng)我們把層都搬到了中間柱的時(shí)候,只需要把最大的那個(gè)盤,從搬到柱就好了,剩下的怎么辦呢柱永遠(yuǎn)是目標(biāo)柱,我們不需要去移動(dòng)它。 學(xué)編程,學(xué)IT,算法也是必不可缺的,這一次給大家?guī)?lái)一個(gè)經(jīng)典的遞歸算法題,漢諾塔。算是算法的入門小題目之一吧~ 視頻教程 什么是漢諾塔? 我這里直接拉來(lái)一個(gè)圖解釋一下(掛了請(qǐng)聯(lián)系我)sho...
閱讀 893·2021-11-23 09:51
閱讀 1107·2021-11-15 17:57
閱讀 1674·2021-09-22 15:24
閱讀 820·2021-09-07 09:59
閱讀 2234·2019-08-29 15:10
閱讀 1857·2019-08-29 12:47
閱讀 760·2019-08-29 12:30
閱讀 3381·2019-08-26 13:51