python实现汉诺塔

汉诺塔是印度一个古老传说的益智玩具。汉诺塔的移动也可以看做是递归函数。

我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:

如果a只有一个圆盘,可以直接移动到c;

如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。

请编写一个函数,给定输入 n, a, b, c,打印出移动的步骤:

move(n, a, b, c)

例如,输入 move(2, ‘A’, ‘B’, ‘C’),打印出:

A –> B

A –> C

B –> C

代码实现方式如下:

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

    if n==1:

        print a,‘-->‘,c

    else:

        move(n-1,a,c,b)  #首先需要把 (N-1) 个圆盘移动到 b

        move(1,a,b,c)    #将a的最后一个圆盘移动到c

        move(n-1,b,a,c)  #再将b的(N-1)个圆盘移动到c

move(4, ‘A‘, ‘B‘, ‘C‘)

原文地址:https://www.cnblogs.com/zjd2626/p/8289166.html

时间: 2024-10-12 05:16:13

python实现汉诺塔的相关文章

基于Python的汉诺塔算法

首先贴出Python编写的汉诺塔算法的代码: def hanoti(n,x1,x2,x3):    if(n == 1):        print('move:',x1,'-->',x3)        return    hanoti(n-1,x1,x3,x2)    print('move:',x1,'-->',x3)    hanoti(n-1,x2,x1,x3) hanoti(3,'A','B','C') 汉诺塔问题归根结底就是一个循环问题,循环包括两大要素:循环体.循环结束条件 首

【Python学习】Python解决汉诺塔问题

参考文章:http://www.cnblogs.com/dmego/p/5965835.html 一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好! 信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉 学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了 汉诺塔的图解递归算法 一.起源: 汉诺

python 实现汉诺塔问题

代码如下: def hano(n,x,y,z): if n==1: print(x,"->",z) else: #将n-1个盘子从x->y hano(n-1,x,z,y) #将剩余的最后一个盘子从x->z print(x,"->",z) #将剩余的n-1个盘子从y->z hano(n-1,y,x,z) n = int(input("请输入汉诺塔的层数:")) hano(n,"A","B&

python算法-汉诺塔问题

汉诺塔问题   初始状态: 思考:当盘子的个数是3的时候,大家写出移动顺序 移动的步骤: 3个盘子,从a到c 1.前面两个盘子,从a到b 1)把前面一个盘子,从a到c a->c 2)把第二个盘子,从a到b a->b 3)把c上的盘子,从c到b c->b 2.最后一个盘子,从a到c a->c 3.把b上的两个盘子,从b到c 1)把前面一个盘子,从b到a b->a 2)把第二个盘子,从b到c b->c 3)把a上的盘子,从a到c a->c 总结: n个盘子,从a到c

python 游戏 —— 汉诺塔(Hanoita)

一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 2. 问题阐述 塔内有三个座A.B.C,A座上有64个盘子,盘子从上到下逐渐变大,最下面的盘子最大.目前要把A座的64个盘子从A座移到C座,并且每次只能移动一个盘子,移动过程中三个座保持大盘子在下,小盘子在上,

python 递归-汉诺塔

# 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print("{} --> {}".format(a, c)) if n == 2: print("{} --> {}".format(a, c)) print("{} --> {}".format(a, b)) print("{} -

python实现汉诺塔问题

def hanoi(n,a,b,c): if n== 1: print("{}->{}".format(a,c)) else: hanoi(n-1,a,c,b) print("{}->{}".format(a,c)) hanoi(n-1,b,a,c) hanoi(5,'A','B','C')

python中汉诺塔的递归算法详解

请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法,例如: def move(n, a, b, c): pass 答案: def move(n,a,b,c): if n==1: print(a,'->',c) else: move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) 理解的关键不需要管每一步是怎么解决的.重点是实现你的目的.我们可以这么理解: move

【Python】汉诺塔问题

count = 0def hannuota(n,src,dst,mid): #n是圆盘数,src是起始,dst是目标,mid是过度 global count if n == 1: print('{}:{}->{}'.format(1,src,dst)) #当圆盘是1时,从起始柱子移到目标柱子 count += 1 else: hannuota(n-1,src,mid,dst) #剩余的圆盘从A移到B柱子 print('{}:{}->{}'.format(n,src,dst)) #最大的圆盘从A