首页 > 其他分享 >用递归函数实现汉诺塔游戏

用递归函数实现汉诺塔游戏

时间:2024-09-23 13:54:40浏览次数:13  
标签:同理 游戏 递归函数 放到 圆盘 num 汉诺塔 test 号盘

1.是什么

        汉诺塔(Hanoi Tower)是一个经典的递归问题,描述了将一个由三根柱子组成的塔上的n个大小不一的圆盘从一个柱子移动到另一个柱子上的过程。每次移动只能移动一个圆盘,并且大圆盘不能放在小圆盘上面。


思路分析:

        当圆盘总数是5时,要将最底层的圆盘(最大的圆盘)放到c塔,那么就要其余的圆盘(num-1)放到B塔

        同理要想将4号盘放到B塔,就要将上面其余的盘放到C盘,最底层的5号盘先忽视

        同理,要想将3号盘放到C塔就要将上面的盘放到B塔

        同理,要将2号盘放到B塔就要将1号盘放到C塔

演示:

到了这步骤已经堆好了以2为底的盘了,后面的步骤就是从A塔中拿出来的大盘为底盘再按顺序叠好

以3号为底的盘子按顺序(大到小)叠好,以此类推

这样,5号盘就可以放到C塔了,那么如果想将4号盘放到C塔,那么其余的盘子就要放到A塔

同理可得,要将3号盘放到A塔,那么上面的盘就要放到C塔

同理:

继续步骤:

每次从B塔中拿出来的大盘就要按照从大到小叠好

分析思路同理,这里就不叙说了

总结:这里细心的朋友就会发现了规律,奇数号盘为底盘时都是放在同一个塔(结合上面的图)这样,首先拿出的是1号盘(奇数盘)就可以判断应该放到哪个塔了

代码:

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        test.test(5, 'A', 'B', 'C');
    }
    public void test(int num, char a, char b, char c) {
        if (num == 1) {
            System.out.println(a + "---->" + c);
        } else {
            //理解为实参位置一一对应A,B,C
            test(num - 1, a, c, b);
            System.out.println(a + "---->" + c);
            test(num - 1, b, a, c);
        }
    }

}

解释:

 好啦,今天的干货就到这啦~    有什么建议或疑问的小伙伴欢迎到评论区留言!

标签:同理,游戏,递归函数,放到,圆盘,num,汉诺塔,test,号盘
From: https://blog.csdn.net/2401_83418369/article/details/142443776

相关文章

  • 活化数据中台:在游戏行业构建数据飞轮的最佳实践
    在当代的游戏行业,竞争日益激烈,数据不仅仅是衡量指标的源泉,更是驱动业务发展的核心资产。游戏公司面临的一个主要挑战是如何有效利用这些数据来改善玩家体验,提高玩家留存率,并实现商业目标。本文将详细探讨如何在游戏行业中建立一个高效的数据飞轮,通过实例和技术分析来说明数据如何成......
  • 学霸带你了解游戏角色成长装备系统基本运算
    探索角色成长与装备系统在现代电子游戏中,角色成长和装备系统是游戏设计的核心要素之一。理解这些系统的运作原理,不仅能帮助玩家更有效地提升游戏体验,还能帮助开发者优化游戏设计,确保游戏的平衡性与乐趣。本篇文章将详细探讨角色属性基础与成长、经验值计算公式、装备系统的影......
  • [PTA]7-8 汉诺塔问题(Hanoi) 7-9 建国的数学难题 7-10 用递归法求解Fibonacci数列
    [PTA]7-8汉诺塔问题(Hanoi)7-9建国的数学难题7-10用递归法求解Fibonacci数列描述:一、汉诺塔问题有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时......
  • 帆软杯——中国云游戏行业研究分析
    帆软杯中国云游戏行业研究分析1.团队介绍2.作品背景3.制作流程3.1数据来源3.2整体架构与思路4.成果展示4.1中国云游戏行业发展现状4.2中国云游戏用户特征分析4.3中国云游戏产业链分析4.4中国云游戏面临新挑战4.5中国云游戏未来展望5.获奖证书中国云游戏......