OOP00-递归函数-汉诺塔(Tower of Hanoi)问题

OOP00-递归函数-汉诺塔(Tower of Hanoi)问题

思路

找到规律, 化繁为简, 分而治之.

问题描述

  • 基本情况
    汉诺塔有3个柱子, 分别为pillar1, pillar2, pillar3.
    在柱子上套着大小不一的盘子, 用数字1,2,3等表示盘子的大小, 数字大的盘子大.
  • 约束条件
    小的盘子只能套在大的盘子的上面.
  • 初始状态
    开始状态是所有的盘子都套在柱子pillar1上, 这里假设有6个盘子(只是为了降低输出结果的数量, 原始的故事中有64个盘子).
  • 目标状态
    目标状态是所有的盘子都套在柱子pillar3上.
  • 动作约束
    每次只能移动一个柱子的最上面的1个盘子到另一个柱子.
  • 可用资源
    可以用pillar2作为中转站. 没有其他可暂存的空间.
  • 需要回答的疑问
    描述移动盘子的过程和需要的移动次数.

问题分析

从小规模的问题开始, 逐渐增加问题的规模.
从人工完成问题的求解开始, 找到规律后, 再用程序自动化完成问题求解.
下面的结果示例中, 表示盘子的数字序列的左侧表示柱子的底部, 例如pillar1: [3, 2, 1].
1个盘子, 移动1次完成

pillar1: [1]                    pillar2: []                     pillar3: []                     
pillar1: []                     pillar2: []                     pillar3: [1]                    

2个盘子,移动3次完成.

pillar1: [2, 1]                 pillar2: []                     pillar3: []                     
pillar1: [2]                    pillar2: [1]                    pillar3: []                     
pillar1: []                     pillar2: [1]                    pillar3: [2]                    
pillar1: []                     pillar2: []                     pillar3: [2, 1]                 

3个盘子,移动7次完成

pillar1: [3, 2, 1]              pillar2: []                     pillar3: []                     
pillar1: [3, 2]                 pillar2: []                     pillar3: [1]                    
pillar1: [3]                    pillar2: [2]                    pillar3: [1]                    
pillar1: [3]                    pillar2: [2, 1]                 pillar3: []                     
pillar1: []                     pillar2: [2, 1]                 pillar3: [3]                    
pillar1: [1]                    pillar2: [2]                    pillar3: [3]                    
pillar1: [1]                    pillar2: []                     pillar3: [3, 2]                 
pillar1: []                     pillar2: []                     pillar3: [3, 2, 1]              

4个盘子, 移动15次完成

pillarFrom: [4, 3, 2, 1]        pillarB: []                     pillarTo: []                    
pillarFrom: [4, 3, 2]           pillarB: [1]                    pillarTo: []                    
pillarFrom: [4, 3]              pillarB: [1]                    pillarTo: [2]  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值