python学习笔记 第五章2

系统 1519 0

经典的汉诺塔问题:
python学习笔记 第五章2_第1张图片
这里我们可以利用递归的思想去做,递归中重要的三步,我们逐条来实现:
1、函数+分支结构
2、递归链条
3、递归基例
函数+分支结构:

def hanoi(n,start,end,mid):
global count
if:
else:

这里我们可以定义一个函数,里面的参数有:一共有n个圆盘,从start柱子移到end柱子,中间柱子为mid。 这里定义一个全局变量来计算移动的步骤数,若为局部变量,会在函数内部不断初始化,所以需要定义全局变量。
递归基例:

if n==1:
print("{}:{}->{}".format(1,start,end))
count=count+1

n=1时,我们只需要一步,既可以从起始点放至结束点。
递归链条:

#else:
hanoi(n-1,start,mid,end)
print("{}:{}->{}".format(n,start,end))
count=count+1
hanoi(n-1,mid,end,start)

我们可以把整个问题看作把n-1个圆盘从start柱子转移到mid柱子,把end柱子看作中间柱子。然后把最下面的圆盘移到end柱子,然后的整个问题就会变成把n-1个圆盘从mid柱子转移到end柱子,把start柱子看作mid柱子,这样,整个问题就会变成下一级的递归问题。问题可看作下图:
python学习笔记 第五章2_第2张图片
我们假设现在的问题为把三个圆盘从A柱子移到C柱子,中间柱子为B。
完整程序为:

#汉诺塔问题
count=0
def hanoi(n,start,end,mid):
global count
if n==1:
print("{}:{}->{}".format(1,start,end))
count=count+1
else:
hanoi(n-1,start,mid,end)
print("{}:{}->{}".format(n,start,end))
count=count+1
hanoi(n-1,mid,end,start)
hanoi(3,“A”,“C”,“B”)
print(count)

结果为:
python学习笔记 第五章2_第3张图片


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论