鱼C论坛

 找回密码
 立即注册
查看: 2205|回复: 5

[已解决]汉诺塔的程序,有没有通俗易懂的解释,已崩溃

[复制链接]
发表于 2017-6-30 15:04:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

def move(n, a, b, c):

    if n==0:
        return
    move(n-1,a,c,b)   
    print(a,'-->',c)
    move(n-1,b,a,c)

# 期待输出:
# A --> C
# A --> B
# C --> B
# A --> C
# B --> A
# B --> C
# A --> C
move(3, 'A', 'B', 'C')
最佳答案
2017-6-30 15:11:45
本帖最后由 Yuki_wym 于 2017-6-30 15:12 编辑

可以去廖雪峰的网站看看,我觉得下边有人的解释还是不错的。我大概描述下
假设有n个盘子,那么要做的事(不考虑中间过程)就是先把上边n-1个盘子从A移到B,然后把最后一个移到C,最后把之前的n-1个从B移到C,对应的就是你程序中写的move(n-1,a,c,b)   
    print(a,'-->',c)
    move(n-1,b,a,c)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-30 15:11:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Yuki_wym 于 2017-6-30 15:12 编辑

可以去廖雪峰的网站看看,我觉得下边有人的解释还是不错的。我大概描述下
假设有n个盘子,那么要做的事(不考虑中间过程)就是先把上边n-1个盘子从A移到B,然后把最后一个移到C,最后把之前的n-1个从B移到C,对应的就是你程序中写的move(n-1,a,c,b)   
    print(a,'-->',c)
    move(n-1,b,a,c)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 15:23:58 | 显示全部楼层
仔细看下这个视频,肯定会懂的。http://v.ku6.com/show/5VFmW7Fkci7qbpejXKR3yA...html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 15:59:14 | 显示全部楼层
跳过这个,就当你没有看过这个
不要问我为什么,因为等你学了后面的东西之后,会发现递归这种东西实用性并不强,没必要去纠结这个问题
反正我当时看到递归也是有点懵逼,然后我就懒得管了,直接忽略,后来证明我的想法是对的
个人建议,可以不采纳,但不接受反对!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 16:55:24 | 显示全部楼层
ba21 发表于 2017-6-30 15:23
仔细看下这个视频,肯定会懂的。http://v.ku6.com/show/5VFmW7Fkci7qbpejXKR3yA...html

看了,三克油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 16:56:16 | 显示全部楼层
gopythoner 发表于 2017-6-30 15:59
跳过这个,就当你没有看过这个
不要问我为什么,因为等你学了后面的东西之后,会发现递归这种东西实用性并 ...

好吧,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-28 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表