关于汉诺塔问题的描述和求解在网络上面一大堆,这里就不多陈述,直接看代码:
#include <iostream>
using namespace std;
void hanio(int count, char first, char second, char third)
{
if(count > 0)
{
hanio(count - 1, first, third, second);
cout << count << "move from " << first << " to " << third <<endl;
hanio(count - 1, second, first, third);
}
}
int main()
{
hanio(2, 'a', 'b', 'c');
return 0;
}
以上输出了下面的内容:
xy@ubuntu:~/primer$ ./a.out
1move from a to b
2move from a to c
1move from b to c
xy@ubuntu:~/primer$
答案就不说了。关键是看下这个递归的过程,递归的直观的描述是这样的:
将n-1个块从a塔借助c塔移动到b塔;
将第n块从a塔移动到c塔;
将n-1个块从b塔借助a塔移动到c塔;
当n=0时,移动停止;
对应到函数hanio的参数就是(木块数目,a塔,b塔,c塔),这个a塔,b塔,c塔的顺序是有含义的,即从a塔借助b塔,移动到c塔;
后面对这个函数的调用要遵循这个含义。