漢諾塔問題【遞歸】
阿新 • • 發佈:2019-03-15
經典問題 我們 怎麽 code color pan end 思路 else
漢諾塔問題是一個遞歸的經典問題。
問題描述:
有x,y,z三根柱子,在x柱子上有按照大在下,小在上的規則,放著64個套筒,現在要將64個套筒借助柱子y移到柱子z上,且每次只能移動一個套筒,每個柱子上的套筒每時每刻只能按照大套筒在下面,小套筒在上面的規則放著,請問一共要移動多少次才能完成該項任務?
解題思路:
我們一般會這樣想,先把上面63個套筒從x移到y,然後再將第64個從x移到z,最後再將63個從y移動到z,任務完成。
那麽63個套筒怎麽移動呢?同樣,先把62個套筒從x移到y.。。。。
代碼詳解:
1 //一共64個盤子 2 void hanota(char a, charb, char c,int n) { 3 4 if (n == 1) 5 cout << a << "->" << c << endl; //將第64個從a,移到c 6 else { 7 hanota(a, c, b, n - 1);//先將上面63個盤子移到b 8 hanota(a, b, c, 1);//然後將第64個從a,移到c 9 hanota(b, a, c, n - 1);//最後將b上的63個移到c 10 } 11} 12 13 14 void T014() { 15 char a = ‘x‘; 16 char b = ‘y‘; 17 char c = ‘z‘; 18 hanota(a, b, c, 64); 19 20 }
漢諾塔問題【遞歸】