汉诺塔问题是一个递归的经典问题。
问题描述:
有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 }
来源:oschina
链接:https://my.oschina.net/u/4265926/blog/3304554