Java 河内塔

Java 河内塔,java,recursion,towers-of-hanoi,Java,Recursion,Towers Of Hanoi,我一直在尝试创建一个程序,用递归思维来解决河内塔的问题。我在网上看了很多,不明白为什么代码总是打印出错误的东西。以下是我到目前为止的情况: public static void tower(int start, int finish, int helper, int number) { if(number == 1) System.out.println("Move disk 1 from "+start+" to "+finish+".")

我一直在尝试创建一个程序,用递归思维来解决河内塔的问题。我在网上看了很多,不明白为什么代码总是打印出错误的东西。以下是我到目前为止的情况:

public static void tower(int start, int finish, int helper, int number)
      {
         if(number == 1)
            System.out.println("Move disk 1 from "+start+" to "+finish+".");
         else
         {
            tower(start, finish, helper, (number - 1));
            System.out.println("Move disk "+number+" from "+start+" to "+finish+".");
            tower(helper, start, finish, (number - 1));
         }      
      }
   }
但它一直在打印:

Move disk 1 from 1 to 3.
Move disk 2 from 1 to 3.
Move disk 1 from 2 to 1.
Move disk 3 from 1 to 3.
Move disk 1 from 2 to 1.
Move disk 2 from 2 to 1.
Move disk 1 from 3 to 2.
有什么建议吗

这应该有效:

public static void tower(int start, int finish, int helper, int number)
      {
         if(number == 1)
            System.out.println("Move disk 1 from "+start+" to "+finish+".");
         else
         {
            tower( start, helper, finish, number-1);
            System.out.println("Move disk "+number+" from "+start+" to "+finish+".");
            tower( helper, finish, start, number - 1);
         }      
      }
塔的输出(1、3、2、nDisks)

Move disk 1 from 1 to 3.
Move disk 2 from 1 to 2.
Move disk 1 from 3 to 2.
Move disk 3 from 1 to 3.
Move disk 1 from 2 to 1.
Move disk 2 from 2 to 3.
Move disk 1 from 1 to 3.

我本来打算缩进代码,但是你的右大括号比右大括号多。你能检查一下你复制的代码是否正确吗?此外,我们还需要了解如何调用此函数来真正回答您的问题。请阅读本页以了解我们需要从您那里得到什么才能给出一个好的答案:首先,您确定它是
number==1
而不是
number==0
?通常,如果您有(例如)3个磁盘,它们将是0、1、2。其次,递归参数似乎是错误的。例如,我认为(在不进行大量调试的情况下),第一个递归调用应该是
tower(start,helper,finish,(number-1))。您应该仔细检查这里的算法。