马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小牛有话说:
各位鱼油,大家好。我是小牛,如果您已经看完或者正在看鱼神的《零基础入门学习Python》视频,想随时复习前面的知识点却又不想花太多时间和精力重翻视频,来这里《零基础入门Python学习》整理瞅瞅小牛呕心做的的视频内容的总结吧^_^,如果觉得有用的话,可以点击帖子右上角的“订阅”按钮,这样以后就能够随时看到小牛做的最新的整理了。
另外,小牛十一回了趟家,结果就将更新耽搁了,这里对关注小牛帖子鱼油们说声抱歉了,后面小牛会尽力加快更新速度,争取在10月底更新到类和对象部分。
本期主要内容导读:
这一期我们归纳一下鱼神第二十四讲“递归:汉诺塔”。这一期里面鱼神主要是通过递归算法实现汉诺塔游戏来秀一下递归算法的优越性,主要牵涉到了汉诺塔游戏的基本规则,递归算法实现汉诺塔游戏的思路以及递归函数的定义过程。下面我们就来详细介绍一下各个知识点吧~~~~~~
1. 汉诺塔游戏的基本规则
汉诺塔游戏有三根柱子,分别为x,y,z。已知初始时在x柱子上有n个盘子,盘子大小各不相同,且大的在下,小的在上;要求将这n个盘子按同样顺序叠放到z柱子上,且要求每次只能转移一个盘子,且盘子在柱子上的顺序必须保证大的在下,小的在上。
2. 递归算法实现汉诺塔游戏思路
递归算法的思想是“分制”方法,即将一个复杂问题分解为几个较复杂问题,再继续讲较复杂问题继续分解为次较复杂问题,继续将次较复杂问题往下分解直到分解为一个能直接解决的简单问题,然后再回过去。这里,我们用递归方法解决汉诺塔游戏的思路如下:
将n个盘子从x柱子转移到z柱子问题分解为三个问题:1)将x柱子顶上的n-1个盘子转移到y柱子上;2)将x柱子最后一个盘子转移到z柱子上;3)将
y柱子上的n-1个盘子转移到z柱子上。
依次将问题分解下去。。。。。。
3. 递归函数实现汉诺塔游戏过程def hanoi(n,x,y,z): #n代表盘子数量,x,y,z代表相应柱子
global count #申明为全局变量,统计一共要移动盘子的次数
count += 1
if n == 1: #递归结束条件
print('%c->%c'%(x,z))
else:
hanoi(n-1,x,z,y) #将n-1盘子从x借助z移动到y
print('%c->%c'%(x,z)) #将最后一个盘子从x移动到z
hanoi(n-1,y,x,z) #将n-1盘子从y借助x移动到z
count = 0
hanoi(3,'x','y','z')
print('一共需要移动盘子的次数为%d次!'%count)
|