[Python]递归汉诺塔

move_count  =  0 ;
def hanoi(n,src,buffer,dst):
    ‘n:需移动的盘子个数,src:盘子原来的位置,buffer:盘子可临时使用的位置,dst:盘子的目标移动位置‘
    global move_count;
    if n < 1:
        print(‘输入有误‘);
        return None;
    elif n==1:
        print(src + ‘----->‘ + dst);
        move_count += 1;
    else:
        hanoi(n-1,src,dst,buffer);
        hanoi(1,src,buffer,dst);
        hanoi(n-1,buffer,src,dst);

move_count  = 0 ;
hanoi(5,‘A‘,‘B‘,‘C‘);
print(‘move_steps = ‘,move_count);print(hanoi.__doc__);

  

运行结果(Python3.7):

A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
A----->B
C----->B
C----->A
B----->A
C----->B
A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
B----->A
C----->B
C----->A
B----->A
B----->C
A----->C
A----->B
C----->B
A----->C
B----->A
B----->C
A----->C
move_steps = 31
n:需移动的盘子个数,src:盘子原来的位置,buffer:盘子可临时使用的位置,dst:盘子的目标移动位置

原文地址:https://www.cnblogs.com/alimy/p/10373071.html

时间: 2025-01-17 20:25:07

[Python]递归汉诺塔的相关文章

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("{} -

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

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

递归——汉诺塔问题(python实现)

规则 每次移动一个盘子 任何时候大盘子在下面,小盘子在上面 方法 假设共n个盘子 当n=1时: 直接把A上的一个盘子移动到C上(A->C) 当n=2时: 把小盘子从A放到B上(A->B)这里开始采用参数,rsc源地址=A,dst目的地址=B 把大盘子从A放到C上( A->C)rsc=A, dst=C 把小盘子从B放到C上(B->C)rsc=B, dst=C 当n=3时: 把A上的两个盘子,通过C移动到B上去, 调用递归实现(A-C->B)rsc=A, trans中转=C, d

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

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

递归--汉诺塔问题 (Hanoi)

汉诺塔问题(Hanoi):古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上.在移动过程中可以利用B座,要求输出移动的步骤 . 结题思路:利用递归思想结题,就是找出其每步的共同规律,然后必须有一步是递归的终止条件. 先假设第一种情况:3根柱,从左到右A,B,C,上面小号,底部大号,从上往下递增. 如要完成该任务,经历3

基于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') 汉诺塔问题归根结底就是一个循环问题,循环包括两大要素:循环体.循环结束条件 首

递归汉诺塔

/*汉诺塔的玩法: * 游戏的规则:将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柱

Acdream 1219 The Towers of Hanoi Revisited(递归汉诺塔问题)

传送门 The Towers of Hanoi Revisited Special Judge Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description You all must know the puzzle named "The Towers of Hanoi". The puzz

2017.11.26 计算机算法之分治与递归——汉诺塔

1.我的递归算法(纯粹的递归) #include <stdio.h>//当盘子数n等于15时,移动次数已经达到32767,运行时间已经达到15.540s long long count; void hanoi(int n,char a,char b,char c)//借助C将A上的盘子全部移动到B { if(n==0) return; hanoi(n-1,a,c,b); printf("%c --> %c\n",a,b); count++; hanoi(n-1,c,b