Java递归来实现汉诺塔游戏,注释详细
短信预约 -IT技能 免费直播动态提醒
我们很容易能想到,可以用递归来实现汉诺塔游戏。因为要将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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341