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',…
Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->',z) f3(n-1,y,x,z) n=int(input('请输入汉罗塔层数:')) f3(n,'X','Y','Z') 运行结果如下:…
汉诺塔问题不管在任何编程语言里都是经典问题,是采用递归算法的经典案例,该问题可以抽象如下: 一 .3根圆柱A,B,C,其中A上面串了n个圆盘 二 .这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面 三 .每次移动一个圆盘,最终实现将所有圆盘移动到C上 利用Python语言接近自然语言的特性,开发者可以更容易的将递归算法翻译成程序语句,需要的代码量很小.汉诺塔问题的解决步骤用语言描述很简单,仅三步: A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位…
1.汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 2.算法介绍 当盘子的个数为n时,移动的次数应等于2^n – 1 后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了.首先把三根柱子按顺序排成品字型,把所有的圆盘按从大到小的顺序…
代码如下: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 汉诺塔.py @time: 2016/3/20 20:00 """ m = input(">>Please enter a maximum value of the sequence:") m = int(m)+1 def move(a,b,c,n): if n =…
一.汉诺塔问题 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 二.汉诺塔问题分析 我们可以将问题简化描述为:n个盘子和3根柱子:A(源).B(备用).C(目的),盘子的大小不同且中间有一孔,可以将盘子“串”在柱子上,每个盘子只能放在比它大的盘子上面.起初,所有…
递归常被用来描述以自相似的方法重复事物的过程,在程序中指的是在函数定义中使用函数自身的方法. 递归是一个树结构,分为递推和回归的过程,当递推到达底部时,就会开始回归. 问题描述:A比B大两岁,B比C大两岁,C的年龄为18,求A的年龄? 代码实现: def age(n): if n == 1: return 18 else: return age(n-1) + 2#这个相当于一个断点或者称为调用点 print(age(3)) 可以用python中的pdb来看程序的具体执行步骤,在代码中加入以下代码…
def move(n,a,b,c): if (n == 1): print ( "第 ", n ," 步: 将盘子由 " ,a ," 移动到 " ,c) #return else: move(n-1,a,c,b) #首先需要把 (N-1) 个圆盘移动到 b print ("A==>b") move(1,a,b,c) #将a的最后一个圆盘移动到c move(n-1,b,a,c) #再将b的(N-1)个圆盘移动到c prin…
#hanoi.py 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) hanoi(2,"X","Y","Z") print("----------") hanoi(3,"X","Y"…
当我们学习一门编程语言的时候,都会遇到递归函数这个问题.而学习递归的一个经典案例就是汉诺塔问题.通过这篇文章,观察移动三个盘子和四个盘子的详细过程,您不仅可以深刻的了解递归,也更加熟悉了汉诺塔的游戏的玩法. 更好的阅读体验可访问 这里. 规则 有a.b.c三个柱子,a从上到下,从小到大有n个盘子.要求把a上所有盘子移动到c,一次只能移动一个盘子,且大盘子不能放小盘子上. 方法 当a上有一个盘子时,直接把该盘子移动到c. 当a上有n个盘子时(n > 1): 先把a上n-1个盘子移动到b, 再把a上…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1207 中文题目,在原来三个柱子的情况下(汉诺塔一),增加了一个柱子,难度也增加了. 思路: 思考时尽量和汉诺塔一联系起来. 1 ,先看汉诺塔一的情况 只有一个盘子时,只需挪动一步:假如n个盘子要移动An步,则有n+1个盘子可以先通过An步把上面的n个盘子挪到第二个柱子上,再挪最大的盘子,最后把n个盘子挪到大的上面,总共2An+1步,则有A(n+1)=2An+1. 以上式子可推得An=2^n-1. 2,回…
今天刚刚在博客园安家,不知道写点什么,前两天刚刚学习完python 所以就用python写了一下汉诺塔算法,感觉还行拿出来分享一下 首先看一下描述: from :http://baike.baidu.com/link?url=fzJdDuawFsjvlLi8vjCMepByo79au3MMyu50GpMN89oj3CzEa00k5giNeuehTfQM 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金…
# -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B移动到C的方法 def move(n,a,b,c): if n==1: print('move', a, '-->', c) else: move(n-1,a,c,b) move(1,a,b,c) move(n-1,b,a,c) move(5,'A','B','C') #计算移动步数 def f(n…
python 游戏 —— 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 2. 问题阐述 塔内有三个座A.B.C,A座上有64个盘子,盘子从上到下逐渐变大,最下面的盘子最大.目前要把A座的64个盘子从A座移到C座,并且每次只能移动一…
一.问题背景 汉诺塔问题是源于印度一个古老传说. 源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 简单来说目的就是要我们把盘子按照规则从A移到C 二.思路 此处我用递归的思想理解汉诺塔问题.递归的思想容易理解,但是运用在代码上的算法并不是解决汉诺塔问题的最佳算法. 我们初定有n个盘子,…
参考文章:http://www.cnblogs.com/dmego/p/5965835.html   一句话:学程序不是目的,理解就好:写代码也不是必然,省事最好:拿也好,查也好,解决问题就好!   信息时代不用信息就是罪过,直接抄不加理解与应用,就不是自己的,下次遇到还是不会,或许其中的某一个细节就能够用于各个问题的解决,共勉   学习一个东西总会遇到一些经典的问题,学习Python第二天尝试看一下汉诺塔问题,还是百度,看看解题思路,纯粹是重温初中课堂,越活越回去了    汉诺塔的图解递归算法…
1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个座上的盘子始终保持大盘在下,小盘在上.在移动过程中可以利用B座来放盘子. 2.解决方法 解法的基本思想是递归.假设有 A.B.C 三个塔,A 塔有  块盘,目标是把这些盘全部移到 C 塔.那么先把 A 塔顶部的  块盘移动到 B 塔,再把 A 塔剩下的大盘移到 C,最后把 B 塔的  块盘移到 C.…
汉诺塔的传说 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔.庙宇和众生也都将同归于尽. 不管这个传说的可信度有…
汉诺塔问题: 问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘.上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘.有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭.也有人相信婆罗门至今仍在一刻不停地搬动着圆盘.恩,当然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在. 现在有n个圆盘从上往下从小到大叠在第一根柱…
汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘.问应该如何操作? 使用python递归函数可以实现 move.py def move(n, a, b, c): if n == 1: print(a, '-->'…
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 python实现如下: #汉诺塔 def move (n,a,b,c,d=1): if n == 1: print(a,'-->',c) return d d=d+move(n-1,a,c,b) #怎么吧…
刚开始看python实现汉诺塔,自己想了很久才想明白,在这里记录一下,希望以后忘记能够立马记起. n=1时,可以直接a->c n=2时,可以借助b然后将a->c n=3时,可以将最上面的那两个作为一个整体先移动到b,然后把最下面的移动到c,再把上面两个移动到c,那上面两个具体怎么移动呢,不就是n=2的时候那样子移动吗?只不过这时候上面两个的目标就是b,所以需要借助c移动到b,再移动完最下面的那时候,目标就又变为了从b移动到c,而需要借助的是a. 再往上就同理,始终将最底下的上面作为一个整体,这…
定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def listsum(numlist): if len(numlist) == 1: return numlist[0] else: return numlist[0]+listsum(numlist[1:]) if __name__ == "__main__": print(listsum([…
汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况. 思路分析:假设前要移动第100个盘子,分两步走,移动第99个:再移动第100个:而要移动第99个,同样分两部,移动第98个,再移动第99个,以此类推: if(n>1) { 1.先将A柱上的前n-1个盘子从A借助C移动到B; 2.把A柱子上的第n个盘子直接移动到C: 3.再将B柱子上的n-1个盘子借助A移动到C; } #!/usr/bin/python #encoding=utf-8 def h…
汉诺塔问题 汉诺塔是根据一个传说形成的一个问题.汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 思路 设hanoi(a, b, c, n)表示从A移动n个盘到C.那么要实现这个操作,首先要把A上面的n-1个盘移动到B,再把最大的第n个盘直接从A移动到C,然后把…
汉诺塔问题可以简单描述成为将a柱子上的圆盘按一定规则借助b柱子完美地复制到c柱子上.现假设有a,b,c三根柱子,a柱子上的圆盘从上到下依次标号为1,2,3,……,n,且为递增状态.规则:每次移动一个盘子,且只能让小的放在大的上面.目标:移动到c柱子上,与原来a上的状态相同. 算法步骤:(1)将a上的除最下面一个盘子以外的n-1的圆盘借助c柱子移动到b柱子上. (2)将a上剩下的圆盘(即最下面的圆盘)移动到c柱子上. (3)将b上的刚才一过来的n-1个圆盘再借助a柱子移动到c上去. (4)任务完成…
python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import 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 po…
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘.当所有的黄金圆盘都重新摆放在另一根柱子上时,世界就将在霹雳声中毁灭,梵塔.庙宇和众生都将同归于尽. 假设A是起始柱,B是中间柱,C是目标柱. 从最简单的例子开始看: 如果A柱上只剩一个圆盘,那么将圆盘从A柱移到C柱即可. (A --> C) 如果A柱上剩两…
what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况下用到递归的情形. #最大997层 def foo(n): print(n) n += 1 foo(n) foo(1) 举个栗子: 假设你想知道A的年龄,但你只知道A比B大2岁,B又比C大两岁,C又比D大两岁,D比E大两岁,恰好你知道E的岁数,那是不是就能知道A的岁数了呢,这就可以组成一个递归.那我…
汉诺塔问题 1.问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘.上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘,只能移动在最顶端的圆盘. 2.问题分析: 汉诺塔问题的以下几个限制条件: 1.在小圆盘上不能放大圆盘. 2.在三根柱子之间一回只能移动一个圆盘. 3.只能移动在最顶端的圆盘.   案例 1 - 假设只有一个盘子的时候, 盘…