2015-04-12 60 views
0

我正在通過Java編程簡介全面介紹第9版和我有一個關於遞歸函數和計數器的問題。我如何將計數器添加到此程序中?即當我們打印出必須製作的電影時,如何才能讓節目打印出它將發生什麼變化?河內塔(遞歸)

示例輸出

轉到1磁盤1至C

轉到2磁盤2至B

程序:

public class Test { 

    public static void main(String[] args) { 

     int n = 3; // Number of disks 

     System.out.println("Tower of hanoi with " + n + " disks"); 

     TowerHanoi(n, "A", "B", "C"); // Space A is the initial position, B is the storage position, and C is the final destination 

    } 

    public static void TowerHanoi(int numDisk,String towerStart, String towerStor, String towerDest) { 

     if (numDisk == 1) { // Moves disk 1    
      System.out.println("Disk " + numDisk + " to " + towerDest);     
     } 

     else if (numDisk != 1) { 

      TowerHanoi(numDisk - 1, towerStart, towerDest, towerStor); // Moves a disk from the starting tower to the destination tower 

      System.out.println("Disk " + numDisk + " to " + towerDest); 

      TowerHanoi(numDisk - 1, towerStor, towerStart, towerDest); // Recursive call, moves disk from storage to destination     
     } 

    } 

} 
+0

我是不是假設正確,這本書還沒有討論的對象,所以你不知道,對象是如何工作的?如果是這樣,有一個一般的方法:重新設計方法的特徵,給它一個額外的參數。然後修改方法的主體。 – Turing85

回答

0

我認爲最簡單的(但有點哈克)的解決方案是添加靜態變量到Test類,如

public static int turn = 0; 

每兩個「的println」之前打印出來的TowerHanoi函數調用

System.out.print("Turn " + turn++ + " "); 
+0

這會給你(程序員)帶來遞增和遞減的問題(在遞歸調用之前你必須再次遞減)。添加參數會更容易,因爲該參數具有「僅」來遞增。 – Turing85

+0

我同意這不是最好的解決方案。然而,正如我從代碼中看到的,它最終會在每次調用時打印「移動」消息,所以如果您在該打印消息之前添加計數器(在兩個位置),您應該得到正確的輸出(假定您希望所有移動均以增量方式編號) –

+0

謝謝,如果我的問題不明確,我很抱歉,我只是在問這個具體設計有沒有櫃檯。 – user3317647