精华内容
下载资源
问答
  • 汉诺塔PYTHON

    2018-09-14 22:29:22
    python 递归 汉诺塔算法python实现python 递归 汉诺塔算法python实现
  • 汉诺塔 Python

    2021-04-17 14:16:34
    汉诺塔是一个可以使用递归解决的经典问题,它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,其中一根柱子从下往上按照从大到小的顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始按照从大...

    汉诺塔是一个可以使用递归解决的经典问题,它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,其中一根柱子从下往上按照从大到小的顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始按照从大到小的顺序重新摆放在另一根柱子上,并规定:小圆盘上不能放大圆盘,三根柱子之间一次只能移动一个圆盘。问一共需要移动多少次,才能按照要求移完这些圆盘。三根金刚柱子与圆盘摆放方式如图1所示。
    在这里插入图片描述

    图1 汉诺塔格局图
    本实例要求编写程序,实现输出汉诺塔移动过程的功能。

    
    def hanoi(num, start_pos, end_pos, mid_pillar):
        if num == 1:  
            plate = start_pos[0].pop()
            print('移动 ' + str(plate) + ' 从 ' + start_pos[1] + ' 到 ' + end_pos[1])
            end_pos[0].append(plate)
        else:
            hanoi(num - 1, start_pos, mid_pillar, end_pos)
            plate = start_pos[0].pop()
            print('移动 ' + str(plate) + ' 从 ' + start_pos[1] + ' 到 ' + end_pos[1])
            end_pos[0].append(plate)
            hanoi(num - 1, mid_pillar, end_pos, start_pos)
    
    
    if __name__ == '__main__':
        A = ([3, 2, 1], 'A')
        B = ([], 'B')
        C = ([], 'C')
        hanoi(len(A[0]), A, C, B)
    
    展开全文
  • 汉诺塔Python

    2020-08-07 21:08:38
    刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起。 n=1时,可以直接a->c n=2时,可以借助b然后将a->c n=3时,可以将最上面的那两个作为一个整体先移动到b,然后把...

    刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起。

    n=1时,可以直接a->c
    n=2时,可以借助b然后将a->c
    n=3时,可以将最上面的那两个作为一个整体先移动到b,然后把最下面的移动到c,再把上面两个移动到c,那上面两个具体怎么移动呢,不就是n=2的时候那样子移动吗?只不过这时候上面两个的目标就是b,所以需要借助c移动到b,再移动完最下面的那时候,目标就又变为了从b移动到c,而需要借助的是a。
    再往上就同理,始终将最底下的上面作为一个整体,这n-1个先移到不用的柱子上,再移动最下面的,这时候最下面的那个就不用考虑了,只需要去考虑n-1个,所以目标就变为将n-1个从b移动到c,这时候就先把n-2个移动到a,然后再移动最下面的到c,然后就可以只管n-2个了。依次类推。

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

    move(2, ‘A’, ‘B’, ‘C’)

    来看以上代码,看n=2的时候,第一次调用move,这时候依次把实参ABC赋值给形参abc,第一个if不满足,所以到第五行第二次调用move,这时候其实就是move(2, ‘A’, ‘C’, ‘B’),把实参ACB依次赋值给形参abc,这时候满足if了,将a移动到c,其实就是将A移动到B,也就是我们需要借助的柱子,和上面分析的一样,然后这个函数返回空值,第二次调用就结束了,(return后整个函数就执行完了)这时候就得执行第一次第五行之后的了,也就是将a移到c,但是注意这时候的形参ac分别指的是第一次传进来的实参,也就是A移到C,然后执行最后一行,再次调用move,这时候将BAC传给了abc,然后调用move,满足if,a移动到c,也就是B移动到C。这是整个过程。
    n=3 的过程底下已经给出。
    从宏观上看,可以将括号里的第123个形参分别看作是现在的位置,借助的柱子,目标柱子。代码2.3行就是在说如果是一个的时候直接从现在位置移动到目标位置就行了。然后如果不是,就将n-1由a借助c去移动到b,然后再将a移动c,然后再将b上的n-1个借助a移动到c。
    在这里插入图片描述

    展开全文
  • 汉诺塔python

    2016-05-29 23:03:55
    # coding=gbk 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-
    # coding=gbk
    
    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("请输入n:"))
    hanoi(n,'X','Y','Z')
            
    展开全文
  • 1)+20, -100) drawpole_1(0)#画出汉诺塔的poles[0] drawpole_1(1)#画出汉诺塔的poles[1] drawpole_1(2)#画出汉诺塔的poles[2] def creat_plates(n):#制造n个盘子 plates=[turtle.Turtle() for i in range(n)] for i ...

    A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位为最终目标位

    (1)将最上面的n-1个圆盘从初始位移动到过渡位

    (2)将初始位的最底下的一个圆盘移动到目标位

    (3)将过渡位的n-1个圆盘移动到目标位

    对于递归算法中的嵌套函数f(n-1)来说,其初始位,过渡位,目标位发生了变化

    具体代码如下:

    mport turtle

    class Stack:

    def __init__(self):

    self.items = []

    def isEmpty(self):

    return len(self.items) == 0

    def push(self, item):

    self.items.append(item)

    def pop(self):

    return self.items.pop()

    def peek(self):

    if not self.isEmpty():

    return self.items[len(self.items) - 1]

    def size(self):

    return len(self.items)

    def drawpole_3():#画出汉诺塔的poles

    t = turtle.Turtle()

    t.hideturtle()

    def drawpole_1(k):

    t.up()

    t.pensize(10)

    t.speed(100)

    t.goto(400*(k-1), 100)

    t.down()

    t.goto(400*(k-1), -100)

    t.goto(400*(k-1)-20, -100)

    t.goto(400*(k-1)+20, -100)

    drawpole_1(0)#画出汉诺塔的poles[0]

    drawpole_1(1)#画出汉诺塔的poles[1]

    drawpole_1(2)#画出汉诺塔的poles[2]

    def creat_plates(n):#制造n个盘子

    plates=[turtle.Turtle() for i in range(n)]

    for i in range(n):

    plates[i].up()

    plates[i].hideturtle()

    plates[i].shape("square")

    plates[i].shapesize(1,8-i)

    plates[i].goto(-400,-90+20*i)

    plates[i].showturtle()

    return plates

    def pole_stack():#制造poles的栈

    poles=[Stack() for i in range(3)]

    return poles

    def moveDisk(plates,poles,fp,tp):#把poles[fp]顶端的盘子plates[mov]从poles[fp]移到poles[tp]

    mov=poles[fp].peek()

    plates[mov].goto((fp-1)*400,150)

    plates[mov].goto((tp-1)*400,150)

    l=poles[tp].size()#确定移动到底部的高度(恰好放在原来最上面的盘子上面)

    plates[mov].goto((tp-1)*400,-90+20*l)

    def moveTower(plates,poles,height,fromPole, toPole, withPole):#递归放盘子

    if height >= 1:

    moveTower(plates,poles,height-1,fromPole,withPole,toPole)

    moveDisk(plates,poles,fromPole,toPole)

    poles[toPole].push(poles[fromPole].pop())

    moveTower(plates,poles,height-1,withPole,toPole,fromPole)

    myscreen=turtle.Screen()

    drawpole_3()

    n=int(input("请输入汉诺塔的层数并回车:\n"))

    plates=creat_plates(n)

    poles=pole_stack()

    for i in range(n):

    poles[0].push(i)

    moveTower(plates,poles,n,0,2,1)

    myscreen.exitonclick()

    1630541-20190327212335367-183814053.png

    1630541-20190327212352222-1540648275.png

    1630541-20190327212319507-971416022.png

    展开全文
  • 最近在学习Python,遇到汉诺塔递归问题百思不得其解,先是百度了汉诺塔原理,然后查看了别人的写的文章,通过整理汇总,希望能够帮助其他人理解。 汉诺塔原理:(来源于百度百科) 汉诺塔(又称河内塔)问题是源于...
  • 汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下:一 、3根圆柱A,B,C,其中A上面串了n个圆盘二 、这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于...
  • 学习递归时,很多小伙伴对汉诺塔的...我从非常直观的角度,配合示意图来逐步分解,解释一下汉诺塔python递归程序到底是怎么运行的。先说几个理解上的关键点【非常关键】:(1)递归,说白了就是不考虑具体的实现细...
  • 本文实例为大家分享了python求解汉诺塔游戏的具体代码,供大家参考,具体内容如下一、问题定义百度百科定义:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石...
  • 汉诺塔 python 解法

    2020-11-01 21:46:41
    汉诺塔 python 解法 将n个盘片从x 转移到z, y是中介。 可以分解符为3步: 将x上面n-1个盘片转移到y; 将x 最底部的盘片转移到z; 将y上的n-1个盘片转移到z; step = 0 # x --> z def hanoi(n, x, y, z): if ...
  • 学习递归时,很多小伙伴对汉诺塔的...我从非常直观的角度,配合示意图来逐步分解,解释一下汉诺塔python递归程序到底是怎么运行的。先说几个理解上的关键点【非常关键】:(1)递归,说白了就是不考虑具体的实现细...
  • 题目:汉诺塔给出最优解,如果对汉诺塔的定义有不了解,请翻看数据结构教材。除了最基本的之外,还有一题,给定一个数组,arr=[2,3,1,2,3],其含义是这是一个有5个圆盘的汉诺塔,每一个数字代表这个圆盘所在的位置,...
  • 首先,我们调用move函数时,一开始盘子数是n;其次,调用move函数一次结束后,下一次调用的函数变为move(n-1, b, a, c),那么这时move函数的状态(是状态,不是定义)实际是这样的:def move(n-1, b, a, c):if n-1 == 1...
  • 汉诺塔问题:问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上...
  • 而学习递归的一个经典案例就是汉诺塔问题。通过这篇文章,观察移动三个盘子和四个盘子的详细过程,您不仅可以深刻的了解递归,也更加熟悉了汉诺塔的游戏的玩法。更好的阅读体验可访问 这里。规则有a、b、c三个柱子,...
  • Hanoi Game 汉诺塔python实现 def hanoi(n,source,target,helper): if n == 1: print(source + '->' + target) else: hanoi(n - 1,source,helper,target) print(source+'-&gt...
  • move(3,'a','b','c')#执行函数def move(n,x,y,z): 传入参数为 move(3, 'a', 'b', 'c')if n==1: (n=3) 条件不成立,不执行print(x,'-->',y)else:① move(n-1,x,z,y) 参数发生变化->传入参数为 move(2, 'a', 'c', 'b')...
  • 一、使用工具 IDLE二、汉诺塔代码import turtleclass Stack:def __init__(self):self.items = []def isEmpty(self):return len(self.items) == 0def push(self, item):self.items.append(item)def pop(self):return ...
  • 汉诺塔python实现

    2019-11-10 11:59:37
    def hanoi(height,left,center,right):#汉诺塔,将高为height的塔从left借助center移到right if height1: #一层汉诺塔,直接从left到right print("第{}层:从{}>{}".format(height,left,right)) else: #大于等于...
  • 递归经典案例汉诺塔 python实现

    万次阅读 多人点赞 2016-01-07 22:53:02
     学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,所以本人觉得可以写篇博客来表达一下自己的见解。这markdown编辑器还不怎么会用,可能写的有点格式有点丑啦,各位看官多多见谅...
  • 汉诺塔问题python解发,附源码
  • 古代有一座汉诺塔,塔内有3个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持...
  • 汉诺塔Python递归

    千次阅读 多人点赞 2018-09-01 01:59:14
    汉诺塔 问题是源于印度一个古老传说。 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石柱子。印度教的主神梵天在创造世界的时候,在其中一根柱子从下到上穿好了由大到小的64片金圆盘,不论...
  • 汉诺塔Python实现

    2020-08-21 12:47:33
    汉诺塔 有三根柱子A、B、C,柱子A上从下到上从大到小摞着n个圆盘。要求将全部圆盘挪动到另一根柱子C,并且大盘始终不能放在小盘上面,且一次只能移动一个圆盘。 方法: 将ABC摆成品字型。当n为偶数时,顺时针...
  • 汉诺塔Python递归解法

    2020-08-01 10:43:00
    汉诺塔解题攻略 递归算法 递归运用条件: (1)每次需要调用自身 (2)有函数出口 实现Python代码 def hanoi(n, x, y, z): if n == 1: print(x, "-->", z) else: hanoi(n-1, x, y, z)#将前n-1个盘子从x移动到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,747
精华内容 1,898
关键字:

汉诺塔python

python 订阅