Python 实现递归算法之汉诺塔

如图的小游戏,汉诺塔:

游戏的目的是将最左边的三块移动到最右边,游戏即为成功。

下面按照代码的步骤进行移动,三根柱子分别代表了x,y,z:

发现可以实现游戏目的!

当然,三个对于很多人来说并不难实现目标,但是当块变成了5个甚至8个呢

下面,我们来试试7个方块,同样是三根柱子,人的计算就很难实现游戏目标了

所以我们用代码来试试:

可以看到非常长,所以我来按照他的指示来进行游戏

游戏成功!

总共有128步操作,如果人为的来进行游戏的话,很有可能会出错。

所以在此运用了递归算法,编写递归函数来教我们如何进行下一步。

以下是汉诺塔的源代码:

def hanoi(n ,x ,y ,z):
    if n == 1:
        print(x, ‘-->‘ ,z)

    else:

        hanoi(n-1,x,z,y)
        print(x ,‘-->‘ ,z)
        hanoi(n-1,y,x,z)

n = int(input("请输入层数:"))

hanoi(n,‘x‘,‘y‘,‘z‘)

原文地址:https://www.cnblogs.com/lesliechan/p/12005059.html

时间: 2024-12-13 00:32:26

Python 实现递归算法之汉诺塔的相关文章

递归算法时间复杂度----汉诺塔

问题:汉诺塔递归算法时间复杂度 算法如下: 解释:size表示汉诺塔的规模,startStack表示汉诺塔起始,endStack 表示完成,midStack表示辅助 def Towers(size,startStack,endStack,midStack): if size == 1: print 'Move disk from ', firstStack, 'to ', endStack else: Towers(size-1,firstStack,midStack,endStack) Tow

【Python实践-3】汉诺塔问题递归求解

1 # -*- coding: utf-8 -*- 2 #汉诺塔移动问题 3 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 4 # 然后打印出把所有盘子从A借助B移动到C的方法 5 def move(n,a,b,c): 6 if n==1: 7 print('move', a, '-->', c) 8 else: 9 move(n-1,a,c,b) 10 move(1,a,b,c) 11 move(n-1,b,a,c) 12 move(5,'

C/C++ 使用递归算法实现汉诺塔

汉诺塔原理解析: 当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上.             当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上.             当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上.            当A塔上有n个盘子是,先将A塔上编号

Python函数递归之汉诺塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上. 并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 汉诺塔的移动问题,汉诺塔的三个圆柱分别标注为A.B.C,圆盘开始是在A圆柱上面并上从下往上按照大小顺序摞着圆盘,需要将其移动到 C圆柱,递归的思路是: (1)A上的的圆盘个数n = 1,那么很直接,直

python练习-递归函数实现汉诺塔搬迁问题

def move(n,a='A',b='B',c='C'): if n==1: print('move',a,'to',c) else: move(n-1,a,c,b)#将A上的n-1块通过c搬运到b上 print('move',a,'to',c)#将A最下面的那一块搬到C上 move(n-1,b,a,c)#将b的n-1块通过a搬到c上,结束 输入: move(10),运行结果如下:

python实现算法题-汉诺塔

def hnoi(n,a,b,c): if n == 1: print a,c else: hnoi(n-1,a,c,b) print a,c hnoi(n-1,b,a,c) hnoi(3,'a','b','c')

数据结构0103汉诺塔&八皇后

主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) { printf("%c-->%c\n",x,z); } else { move(n-1,x,z,y); //将n-1个盘子从x借助z移到y上 printf("%c-->%c\n",x,z); //将第n个盘子从x移到z上 move(n-1,y,x,z);

python3汉诺塔简单实现代码

小时候喜欢玩汉诺塔,今天用python实现简单的汉诺塔功能 代码: def hannoi(n,x,y,z): if n==1: print(x,'-->',z) else: hannoi(n-1, x, z, y) print(x,'-->',z) hannoi(n-1, y, x, z) n=int(input("请输入x,yz:")) hannoi(n, "X", "Y", "Z") 原文地址:https://

python的递归算法学习(3):汉诺塔递归算法

汉诺塔问题是递归函数的经典应用,它来自一个古老传说:在世界刚被创建的时候有一座钻石宝塔A,其上有64个金蝶.所有碟子按从大到小的次序从塔底堆放至塔顶.紧挨着这座塔有另外两个钻石宝塔B和C.从世界创始之日起,波罗门的牧师就一直在试图把塔A上的碟子移动到C上去,其间借助于塔B的帮助.每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面.当牧师们完成这个任务时,世界末日也就到了. 对于汉诺塔问题的求解,可以通过以下3步实现: (1)将塔A上的n -1个碟子借助C塔先移动到B塔上: (2)