汉诺塔问题的解题过程及体会

汉诺塔问题就是有三个柱子,一个柱子上有n个盘子,逐渐变大,要将这n个盘子从a柱通过b柱转移到c柱上去,并且大盘子不能压在小盘子上。如何解决?
一、这是一个递归问题,学习了知乎的一些回答:
1.最重要的一点!对于递归的理解在于放弃!放弃自己对理解和跟踪递归全程的企图。我就是没有意识到这一点,自我纠结了很久,要知道咱们是人脑不是计算机。
2.递归需要思考的就是递归的两层之间的交接,即递归的有规律的过程步骤和递归的终结条件。
二、解题过程:
1.当有n个盘子需要从a柱子通过b柱放到c柱时,过程就是三个步骤:
(1)将n-1个盘子从a柱通过c柱放到b柱
(2)将第n个盘子从a柱放到c柱
(3)将n-1个盘子从b柱通过a柱放到c柱
2.而我们该如何做(1)将n-1个盘子从a柱通过c柱放到b柱这个步骤呢?重复同样的三个步骤,只是参数发生了变化!
我们可以发现其实所有的动作都可以用一个函数进行定义:我们设定一个函数为move(n,source,temp,target),n为需要移动的盘子的个数,source为当前盘子所在的地方,temp为缓冲柱,target为盘子需要放置的终点。
那么根据1中的三个步骤可以将函数描述为
move(n,source,temp,target):
(1)将n-1个盘子从source柱通过target柱放到temp柱
(2)将第n个盘子从source柱放到target柱
(3)将n-1个盘子从temp柱通过source柱放到target柱
最后我们需要考虑递归的终结条件,就是当n=1的时候,此时只需

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值