《java heneita计算方法》

河内之塔计算方法

public class Hanoi

{   

public static void main(String args[])

{      

     System.out.print("请输入有几个盘子:");    

     Scanner s = new Scanner(System.in);   

     Hanoi hanoi = new Hanoi();     

     hanoi.move(s.nextInt(), 'A', 'B', 'C');    }  

public void move(int n, char a, char b, char c)

{      

扫描二维码关注公众号,回复: 520709 查看本文章

if(n == 1)

  {           

      System.out.println("盘子由 " + a + " 移至 " + c);    

  }     

  else {         

          move(n - 1, a, c, b); 

          move(1, a, b, c);    

          move(n - 1, b, a, c);   

    }  

}

}

汉诺塔计算公式思路来由:想要将n个盘子从A棍移动到C棍   进行的移动次数为  

(2的N次方-1)次

 

使用递归的方法是因为:当现在有5个盘子需要三个棍子ABC中从A移动到C,那么首先应该将前四个盘子当成一个整体1,然后将整体1先移动到B棍上;然后将第五个盘子移到C棍上;然后将整体1从B棍移动到C棍上.........对于前四个盘子来说,先将前3个盘子放在移动到C棍上,将第四个盘子移动到B棍上,然后将前三个盘子移动到B棍上,然后将第五个盘子放到C棍上,然后将B棍上的4个盘子移动到C棍上........依照这种反推整体移动方法来推论盘子的移动方式正好和递归方式吻合,所以才大概会有以上的计算公式吧.......

 

------------------------------------------------------------------------------------------------

 

猜你喜欢

转载自liuzhiqiang19890403.iteye.com/blog/2178354