java实现汉诺塔游戏(递归)(附超详细易懂注释)
Posted 钢铁的面条
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现汉诺塔游戏(递归)(附超详细易懂注释)相关的知识,希望对你有一定的参考价值。
- 我们很容易能想到,可以用递归来实现汉诺塔游戏。因为要将n(n>1)个盘子从“源”柱子移到“目标”柱子,我们要先把n-1个盘子从“源”柱子移到“辅助”柱子上,然后把最底下那一个盘子移到目标柱子上,最后把“辅助柱”上的n-1个盘子移动到目标柱子上。n==1时直接移到目标柱上,也是递归的出口。
- 有了以上思路的铺垫,就可以开始实现代码了。
-
public class HanoiDemo public static int hanoiCalledCount = 0;//成员变量记录操作次数 //汉诺塔游戏是一种二路递归 public static void main(String[] args) hanoi(3,"A","B","C"); System.out.println("执行"+hanoiCalledCount+"步"); public static void hanoi(int n,String source,String target,String assist) if(n<=0) System.out.println("n要大于零"); if(n==1)//递归的出口,n==1时直接移到目标柱上 System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\\n",source,target); hanoiCalledCount++;//计数器加一 else //先把n-1个盘子从“源”柱子移到“辅助”柱子上 hanoi(n-1,source,assist,target); //把最底下那一个盘子移到目标柱子上 System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\\n",source,target); hanoiCalledCount++;//计数器加一 //把“辅助柱”上的n-1个盘子移动到目标柱子上 hanoi(n-1,assist,target,source);
运行结果如下,大家可以尝试验证一下是否正确。
-
当n==2时,要操作3次
当n==3时,要操作7次
当n==4时,要操作15次
相信大家已经猜出规律了,操作次数==n^2-1
可见,随着盘子个数n的增加,操作次数以n^2增加,所以,自己玩汉诺塔游戏的是时候建议数字不要超过20。
以上是关于java实现汉诺塔游戏(递归)(附超详细易懂注释)的主要内容,如果未能解决你的问题,请参考以下文章