递归调用--汉诺塔

来自学习笔记

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

move(3,'A','B','C')

输出为
move A –> C
move A —> B
move C –> B
move A —> C
move B –> A
move B —> C
move A –> C

(1) 一定要理解递归的内涵。当你定义好一个递归函数的时候,你一定要明白这个递归函数的作用。例如在这个问题中move(n,a,b,c)就代表着有n个盘需要从a通过b的帮助来移动到c;而且注意这里的第2,3,4个参数是变量,代表着柱子的名字。move(5,m,n,k)就代表有3个柱子分别叫做m,n,k,我需要把5个盘子从m通过n移动到k

(2) 这里可以把顶部的n-1个盘子看成一个整体,这样这个问题就变成只要解决2个盘子的问题了,步骤自然是只要3步即可。由于我们把其中的n-1个盘子看成了整体,所以每次要对这n-1个盘子进行操作的时候就要使用递归函数。因为n-1个盘子不是随便就能移动的。这就是使用递归函数的时机

(3) 有人可能会问为什么不把底部的n-1个盘子看成一个整体来移动?这是因为汉诺塔的规则限制,小盘子必须放在大盘子上面。如果你把底部n-1个盘子看成整体来递归操作,会发现违反这种规则的情况,所以是不建议这么做的

阅读更多
文章标签: 递归
个人分类: python入门
上一篇python数据结构---栈和队列
下一篇html作业总结
想对作者说点什么? 我来说一句

C#汉诺塔递归调用

2013年12月26日 881B 下载

C语言课程设计-汉诺塔的演示

2010年10月27日 29KB 下载

没有更多推荐了,返回首页

关闭
关闭