漢諾塔遞歸代碼為什么這么難理解 遞歸采用什么結(jié)構(gòu)來實(shí)現(xiàn)?
遞歸采用什么結(jié)構(gòu)來實(shí)現(xiàn)?說到遞歸,階乘,斐波那契和譚老師 人們自然會(huì)想到河內(nèi)塔。說到遞歸數(shù)據(jù)結(jié)構(gòu),當(dāng)然是樹型結(jié)構(gòu)。c語言。漢諾塔問題中的hanoit(n-1,a,b,c)是如何實(shí)現(xiàn)將a上面的(n-1)
遞歸采用什么結(jié)構(gòu)來實(shí)現(xiàn)?
說到遞歸,階乘,斐波那契和譚老師 人們自然會(huì)想到河內(nèi)塔。說到遞歸數(shù)據(jù)結(jié)構(gòu),當(dāng)然是樹型結(jié)構(gòu)。
c語言。漢諾塔問題中的hanoit(n-1,a,b,c)是如何實(shí)現(xiàn)將a上面的(n-1)個(gè)盤移到b棒?
所以你可以 不看代碼就不能準(zhǔn)確地找到問題。
通常漢諾塔問題是通過遞歸實(shí)現(xiàn)的,n-1應(yīng)該是遞歸調(diào)用漢諾塔函數(shù)中的漢諾塔。
漢諾塔遞歸算法?
1 //河內(nèi)塔
2 #包含ltstdio.hgt
3 Void Hanoi (int n,char a,char b,char C)//這里代表通過b列將A列上的板塊移動(dòng)到C列。
4 {if (1 n) //如果是板塊,直接把A列上的板塊移到c。
5 {
6 printf(
7層漢諾塔最簡單玩法?
七層樓高的河內(nèi)塔游戲至少需要127級臺(tái)階。其實(shí)算法很簡單。當(dāng)板數(shù)為n時(shí),移動(dòng)次數(shù)應(yīng)等于2n–1。后來,一位美國學(xué)者發(fā)現(xiàn)了一種出乎意料的簡單方法,只需要依次兩步。首先將三列按順序排列成成品字體,將所有圓盤按降序放在A列上,根據(jù)圓盤數(shù)量確定列排列順序:若n為偶數(shù),A B C;順時(shí)針放置;如果n是奇數(shù),順時(shí)針依次放A C B。(1)將圓盤1從當(dāng)前列順時(shí)針移動(dòng)到下一列,即當(dāng)n為偶數(shù)時(shí),若圓盤1在A列,則移動(dòng)到B列;如果光盤1在b列,將其移動(dòng)到c;如果磁盤1在c列,將其移動(dòng)到a。(2)然后,將其他兩個(gè)支柱上的可移動(dòng)磁盤移動(dòng)到新支柱。即,將非空列上的光盤移動(dòng)到空列,當(dāng)兩列都不為空時(shí),移動(dòng)較大的光盤。此步驟不指定要移動(dòng)哪個(gè)磁盤。你可能覺得有很多可能,其實(shí)不是,唯一能實(shí)施的行動(dòng)就是。(3)重復(fù)(1)和(2)的操作,最后可以按規(guī)定完成河內(nèi)塔的移動(dòng)。所以結(jié)果很簡單,就是按照移動(dòng)規(guī)則把金塊往一個(gè)方向移動(dòng):比如漢諾塔三階塔的移動(dòng):A → C,A → B,A → C,B → A,B → C,A → C .漢諾塔問題也是編程中經(jīng)典的遞歸問題。