汉诺塔的递归方法相信很好理解,不过作为Java初学者,我暂时不知道怎样才能在递归解法的基础上添加某些方法,来展示具体在某一步移动前后A、B、C三根柱子的状态(分别有哪些圆盘,在哪个柱子上面。)这个暂放,待思考。若您有好的方法也希望不吝赐教。以下是递归的简单写法。
public class Hanoi1
{
private int n;
private String a;
private String b;
private String c;
public void move(int n , String a ,String b ,String c)
{
if(n<1)
{
System.out.println("Wrong Number <0");
}
else if(n == 1)
{
System.out.println(a + ">>"+ c);
}
else
{
this.move(n-1, a, c, b);
System.out.println(a + ">>"+c);
this.move(n-1, b, a, c);
}
}
}
因希望能得知在移动前后,三根柱子的状态。同时既知道汉诺塔有非递归的解法,查阅其具体循环原理后,得出了以下非递归的方法。
//本方法建立在以下三个基本理论上面,若这些理论无效,则无法通过这种方式解出。
//1.汉诺塔的总步数为2^n-1。
//2.汉诺塔的移动第一步总是将顶盘(最小盘top),以A>>B>>C>>A>>B>>C……的顺序移动一步。
//3.汉诺塔第二部移动总是在非顶盘(not-top)的两个柱间进行移动。若其中一个为空柱,则移动到空柱。否则,将小盘移动到大盘。
//重复第2、3两部,当移动步数等于2^n-1的时候,则移动结束。
//注意,若n为奇数的时候,实际移动结果为,所有的盘都移动到了B柱位置。此时只需要在移动前,将B和C交换(B和C对应的引用交换一下)位置即可。
//介于所有的实现,都必须是建立在以上的基础理论上。所以其实仅仅是把这种现实方法转换成计算机方法而已。
//只需要用计算机方法描述该过程就可以了。
因为该方法是基于一套简单的循环思路,所以虽自己摸索写出了该方法,似乎也仅是对汉诺塔该解法有所得,但并没有其它方面的提高。仅仅是把初学的一些知识融会贯通而已。同时该方法并非一次成型,本是希望能