1. 程式人生 > >漢諾塔問題【遞歸】

漢諾塔問題【遞歸】

經典問題 我們 怎麽 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, char
b, 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 }

漢諾塔問題【遞歸】