2015-04-12 127 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