代碼的輸出是1,1,2,2 3,3,4,4,而不是1,2,3,4。我嘗試了很多不同的位置來使它變爲可用,但這是我得到的最接近的。我只是誤解了一些關於遞歸的基礎知識?如何在遞歸方法中不重複步驟列表?
import java.util.Scanner;
public class TowerOfHanoi {
public static int a = 1;
public static void main(String[] args) {
TowerOfHanoi towerOfHanoi = new TowerOfHanoi();
System.out.println("Enter number of disks: ");
Scanner scan = new Scanner(System.in);
int disks = scan.nextInt();
towerOfHanoi.solve(disks, "1", "2", "3");
scan.close();
}
public void solve(int n, String start, String mid, String end){
if(n == 1){
System.out.println(a + " : "+ start + " to " + end);
a++;
} else {
solve(n-1, start, end, mid);
System.out.println(a + " : " + start + " to " + end);
solve(n-1, mid, start, end);
}
}
}
輸出:
Enter number of disks:
3
1 : 1 to 3
2 : 1 to 2
2 : 3 to 2
3 : 1 to 3
3 : 2 to 1
4 : 2 to 3
4 : 1 to 3
你可以顯示整個輸出和所需的輸出嗎?有一件事是,你在每個遞歸調用兩次[solve(n-1,...)'直到n等於一個 – HorusKol
謝謝Scott修復輸出。 –
因爲當你到達遞歸的底部(n == 1)時,你只會增加一個,而你實質上是在鑽回到n == 2之前打印並再次調用求解 – HorusKol