我試圖找出「河內塔」的問題,它通過一種方式將堆棧中從最小到最大的磁盤從起始堆棧移動到目標堆棧。沒有在較小的磁盤上放置較大的磁盤。解決河內拼圖塔的遞歸方法
我被賦予了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