递归,汉诺塔游戏

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

原文地址:https://www.cnblogs.com/fkfkfk/p/9180155.html

时间: 2024-11-09 00:31:15

递归,汉诺塔游戏的相关文章

经典分治 - 汉诺塔游戏

分治策略: 将父问题划分为多个子问题(注:子问题与父问题一定要具有自相似性),然后找递归出口. 1.子问题规模变小.2.子问题与父问题本质等价. 汉诺塔游戏简述:三个柱A.B.C,将从大到小的盘按规则从A柱移到B柱. 具体的分治算法实现: 1 - N从A移动到B,C为辅助. 等价于: 1.1 - (N - 1)从A移动到C,B为辅助 2.把N从A移动到B 3.1 - (N - 1)从C移动到B,A为辅助 话说当时刚开始想这个问题的时候,我把2 - N当作一个子问题移动对象,将1盘移到辅助柱子上,

函数递归——汉诺塔经典题型

理解汉诺塔游戏规则,有A,B,C座塔,将A塔上的圆盘移动到C塔上,当A塔只有一块圆盘时,直接移动到C塔,当A塔有N个圆盘时,需要将N-1个圆盘移动到B塔,然后将剩下的最底下圆盘移动到C.大盘不能压住小盘 汉诺塔游戏主要考虑到最底下圆盘的调用,每次的移动都假设到最底下圆盘. 其实到目前我还是不太明白 def move(n, x, y, z): if n==1: print (x,'-->',z) return move(n-1,x,z,y)#将前n-1个盘子从x移动到y上 move(1,x,y,z

【数据结构与算法】递归汉诺塔

汉诺塔 汉诺塔是根据一个传说形成的数学问题(关于汉诺塔): 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则. 递归汉诺塔 解题思路: 可以把问题简化成2个盘子的情况,如:A上有两个盘子,B和C是空的.如果要把A的两个盘子全部移动到C,需要经过以下步骤: 1.A移动一个盘子到B 2.A移动一个盘

codevs3145 汉诺塔游戏

3145 汉诺塔游戏 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔. 游戏中的每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方) 2. 移动的过程中,你必须保证大的盘子

Pyhton:汉诺塔游戏

#汉诺塔游戏攻略! def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y上 print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上 hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上 n = int(input('请输入层数:')) hanoi(n,'x','y','z') 输出结果为: 请输入层数:3 x --> z x -->

3145 汉诺塔游戏——http://codevs.cn/problem/3145/

第一部分:题目 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔. 游戏中的每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方) 2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小的盘子) 如对于n

CodeVs[3145 汉诺塔游戏]

题目描述 Description 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔. 游戏中的每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方) 2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小

递归汉诺塔

/*汉诺塔的玩法: * 游戏的规则:将A柱上的盘子移动到C柱上,大盘必须在小盘之上. * 1 当A柱上只有一个盘子的时候,直接移动到C柱上: * 2 当A柱上有两个盘子的时候, *   将A柱上的1盘(从上到下编号)移动到B柱, *   将A柱上的2盘移动到C柱, *   将B柱上的1盘移动到C柱: *   (将A上的1~n-1盘---->B柱,将A柱上n---->C柱,B柱上的1~n-1盘---->C柱) * 3 当A柱上有三个盘子的时候,将A柱上的1~2盘移动到B柱, *   将A柱

3145 汉诺塔游戏

题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题.在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔. 游戏中的每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方) 2. 移动的过程中,你必须保证大的盘子不能在小的盘子上方(小的可以放在大的上面,最大盘子下面不能有任何其他大小的盘子) 如对于n=3的情况,一个

Unity实现汉诺塔游戏

汉诺塔的规则: 有ABC三个柱子,A柱子上从小到大排列圆盘 要将A柱子上所有圆盘移动到C柱子上,每次只能移一个 圆盘放置必须从小到大,不能存在此盘子上面有比它大的存在. 比如三个汉诺塔玩法: 理理思路,大体算法就是这个样: 那么算法就很清晰了. 不知道哪一天我又想把这个游戏扩展,我决定用四个类,让游戏的设计更条理一点: Temp类//临时存储圆盘对象,就是正在移动的圆盘 Torus类//圆盘类,每个圆盘都有 Cylinder类//圆柱类,每个圆柱都用,鼠标点击触发游戏 GameManage类//