python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

汉诺塔问题

汉诺塔的移动可以用递归函数非常简单地实现。请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法。

汉诺塔问题的实现关键是理解递归的本质。递归问题的关键个人认为是,重目的而略过程。利用递归,我们不需要了解搬移盘子的过程。只需要知道,我们的目的是按照顺序和规则把盘子从A柱放到C柱。于是编写一个函数,move(n, a, b, c)。可以这样理解:move(盘子数量, 起点, 缓冲区, 终点)。

分析函数要执行的步骤:

1、A上只有一个盘子的情况,直接搬到C,代码如下:

if n == 1:

print(a, '-->', c)

2、A上不止有一个盘子的情况

2.1 首先,需要把n-1个盘子搬到缓冲区B柱子。打印出的效果是:a --> b。

move(n - 1, a, c, b)

2.1  再把最大的盘子搬到C柱子,也是最大尺寸的一个。打印出:a-->c。

move(1, a, b, c)

2.2 最后,把剩下B柱的n-1个盘子搬到C上,此时缓冲区变成了起点,起点变成了缓冲区。

move(n - 1, b, a, c)

3、完整的代码十分简洁,如下所示:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Date : 2018-05-22 16:22:13

# @Author : Chen

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值