汉诺塔问题(通过改变函数参数顺序实现)

汉诺塔问题目录

1. 汉诺塔问题简介

2. 汉诺塔问题分析

   1.汉诺塔问题简介

       汉诺塔问题源自于印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。梵天命令一个叫婆罗门的门徒将所有的圆盘移动到另一个柱子上,并规定每次只能移动柱子最顶端的一个圆盘并且在每个柱子上,小圆盘永远要位于大圆盘之上。

       问题描述了三个石柱A,B,C,其中A石柱上有n(64)个圆盘,要求每次只移动一个圆盘且小圆盘必须在大圆盘上,求移动的方法。

2.汉诺塔问题分析

初入手这道题会觉得无法上手,但我们可以将该类复杂问题简单化,我的方法如下:

       首先,实现两层汉诺塔问题。

7b2f952616b540b2af28a0b8b3de2a3c.png

 

       然后我们可以将n层汉诺塔问题转换为两层汉诺塔问题。(即前n-1层与第n层)再将n-1层做如上转换直到将其转换为两层。

       此处为我的编程实现,编程实现后面则是我实现汉诺塔问题的具体方法。

b953209174fd456b98273241503a9978.jpg

 57c732404c7f45029980fceb8aa5a9f9.jpg

 

       假设n层,则将前n-1由A移至B,将第n层由A移至C,再将前n-1由B移至C 。

da8801d49a994a9ba12c8649e43ae3ba.jpg

 

       有些同学可能会觉得该类问题的第一次转移可能会是由A至B也可能是由A至C(取决于n的奇偶,奇数A-C,偶数A-B),所以认为无法通过两层汉诺塔整体实现。

       但是由于我在这里是通过转变函数中参数顺序来进行调整的,并且我的函数最后一个参数指的是圆盘的落点,第二个指的是圆盘的出发点。

       如果n是偶数,经过n-1由A-B时由于传参过程中将b,c位置改变,最终由于输出的时候是两层汉诺塔,所以b,c改变了偶次,即相当于未改变,于是输出为A-B

        如果n是奇数,经过n-1由A-B时由于传参过程中将b,c位置改变,最终由于输出的时候是两层汉诺塔,所以b,c改变了奇次,即相当于改变一次,于是输出为A-C

59b806881c534a278fa400408df1c0c8.jpg

 

        通过改变函数传参顺序实现改变一次即可实现汉诺塔问题。 

        最后,身为大一新生,如有错误,还望大家能够指正!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云 程 发 轫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值