思路: 这里使用递归法
n==1的时候,直接把它从x移到z位置即可。
如果是n层,我们首先把上面的n- 1层移到y位置,然后把最 下面的那个最大的盘子,移到z位置,然后把y上面放的上面n-1层移到z位置即即可,
我们在移动上面n-1层盘子的时候。先把上面n-2层移到z位置,然后把第n- 1层那个最大的放到y位置,然后把z上面的n-2层移到y位置即可。
我们在移动上面n-2层盘子的时候,先把上面n- 3层移到y位置,然后把最大的那个第n- 2层移到z位置,然后把y上面放的n- 3层放到z位置即可。
我们在移动上面n-3层盘子的时候,........... .递归就完事了!
我们在移动上面2层盘子的时候,首先把上面那个放到y(z)上面,然后把第二层放到z(y)上面,再把y(z) 上面的那一层移到z(y)上面即可。我们在移动上面那一层的时候,n==1
由递推方程的知识可知,该过程的时间复杂性为O(2^n),64层就要移动2^64-1次盘子。不过这次我们使用程序观察这个变化
这个程序记录了1到36个盘子的时候,Hanoi tower的移动次数,执行时间。为了保证效率,不打印中间结果,只打印最终结果
public classHanoi {
/**
* author:ZhaoKe
* college: CUST
*/
public long count = 0;public void hanoi(int n,char a,char b,charc) {
//Hanoi塔问题其实就这几行if (n == 1) {this.count++;