码迷,mamicode.com
首页 > 编程语言 > 详细

Python 实现汉诺塔问题(递归)

时间:2017-10-12 17:52:54      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:名称   汉诺塔问题   编号   递归调用   解决   数位   img   pytho   位置   

有三根柱子一次为A,B,C 现在A柱子上有3个块,按照汉诺塔规则移动到C柱子上去,打印步骤?

我们这样理解:A为原始柱,C为目标柱,B为缓冲柱

1.定义一个函数move(n,a,b,c),n为原始柱上面的块数,a为原始柱名称,b为缓冲柱,c为目标柱

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

2.首先,我们假定原始柱上只有一个块,那就是直接从原始柱移动到目标柱,无需经过缓冲柱

def move(n,a,b,c):
    if n == 1:
        print(a,‘-->‘,c)
    else:
        pass

3.当原始柱上不止一个块的时候,我们先将上面n-1个块移动到缓冲柱上面,此时方法中的目标柱就是缓冲柱(请注意参数位置)

def move(n,a,b,c):
    if n == 1:
        print(a,‘-->‘,c)
    else:
        move((n-1),a,c,b)
        pass

4.移动完成之后此时在三根柱子上就是原始柱上有编号n的最大块,缓冲柱上有n-1个块,我们将最大块移动到目标柱上

def move(n,a,b,c):
    if n == 1:
        print(a,‘-->‘,c)
    else:
        move((n-1),a,c,b)
        print(a,‘-->‘,c)
        pass

5.最后一步,将缓冲柱子上的n-1个块移动到目标柱上

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

方法定义以及调用过程截图如下:

技术分享技术分享

总结:整个过程中原始柱,缓冲柱,目标柱的角色不停地发生变化,当你把握住这点后,便可以轻松的使用递归调用来解决此问题

Python 实现汉诺塔问题(递归)

标签:名称   汉诺塔问题   编号   递归调用   解决   数位   img   pytho   位置   

原文地址:http://www.cnblogs.com/carryLess/p/7657147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!