我试图找出“河内塔”的问题,它通过一种方式将堆栈中从最小到最大的磁盘从起始堆栈移动到目标堆栈。没有在较小的磁盘上放置较大的磁盘。解决河内拼图塔的递归方法
我被赋予了algorithim:
If numberDisks == 1:
Display “Move the top disk from S to D”.
Else
Move(numberDisks -1, ‘S’, ‘A’, ‘D’);
Move(1, ‘S’, ‘D’, ‘A’);
Move(numberDisks -1, ‘A’, ‘D’, ‘S’);
然而,这似乎与大多数其他examples不同这似乎不使用移动(1,“S”,“d”,“A”)的工作;在递归函数中。
至于我的代码代表,我似乎重复基本情况的一举一动,和林不知道如何构建我的打印报表给正确的输出应该是这样的:
Move disk 1 from S to D
Move disk 2 from S to A
Move disk 1 from D to A
Move disk 3 from S to D
Move disk 1 from A to S
Move disk 2 from A to D
Move disk 1 from S to D
当试图移动3个磁盘。
// Recursively solve Towers of Hanoi puzzle
public static void main(String[] args) {
if (handleArguments(args)) {
System.out.println("numDisks is ok");
int numDisks = Integer.parseInt(args[0]);
Move(numDisks,'s', 'a', 'd');
}
}
// recursive case
public static void Move(int disks, char start, char aux, char destination) {
// base case
if (disks == 1) {
System.out.println("Move disk 1 from S to D");
// if number of disks is 2 or greater
} else if(disks > 1) {
Move(disks - 1, start, aux, destination);
System.out.println("move disk " + disks + " from " + start + " to " + destination);
Move(1, start, destination, aux);
Move(disks - 1, aux, destination, start);
}
}
我读了两遍,但我仍然不清楚你的问题。你能否考虑改写你的问题并清楚地表明你的问题? – user2004685
@ user2004685当然,我的递归函数https://gist.github.com/Silverfin13/a7ec33e296396b8c8f90要求用户输入他们想放入[河内问题塔]的磁盘数量(http://www.javawithus .com/programs/towers-of-hanoi),并且一步一步地告诉哪个磁盘要从上到下编号从1到n,以便将所有磁盘移动到目标磁盘。但是,它会为每一步重复我的基本情况,并且不会正确打印要采取的步骤。 – Silverfin