python递归函数例子_Python递归函数经典案例-汉诺塔问题
汉诺塔
汉诺塔问题是递归算法学习的一个经典案例,首先来看下汉诺塔问题的相关描述:
汉诺塔问题起源于一个古老的印度传说,大梵天创世时制作了三根金刚石石柱,在第一根柱子上从上往下从小到大摞着64片金盘,婆罗门要把第一根柱子上的所有圆盘按照同样的顺序重新放到另一根柱子上,要求小圆盘上不能放大圆盘,一次只能移动一个圆盘。
问题描述
我们的问题就是通过递归算法,设计一个算法可以计算输出操作过程,编写move(n,x,y,z)函数,n代表初始状态ABC三个柱子中第一个柱子A上一共几个圆盘,要求输出从柱子A借助柱子B全部移动到柱子C全过程。
三阶的情况演示
我们先来看下从一个圆盘到三个圆盘时,操作的过程:
n=1时,我们只需要把圆盘从A移动到C一步即可;
n=2时,先把A上第一个圆盘移动到B,再把A上第二个圆盘移动到C,再把B上小盘子移动到C,一共三步;
n=3时,参照2个圆盘时的情况,具体操作如下图
递归算法
我们在游戏过程中就是不断借助B柱,把A柱从上到下1~(n-1)个圆盘借助C移动到B,再把A柱最大的圆盘n移动到C;再把B柱上1~(n-2)个圆盘借助C柱移动到A柱,再把n-1移动到C柱。。。。
可以发现,我们其实一直是在从起始柱借助一个缓冲柱往目标柱放起始柱上最大的那个圆盘,
有函数move(n,x,y,z),我们设圆盘个数n,初始状态起始柱为x,缓冲柱y,目标柱z,下面开始递归分析:
有n个圆盘,我们第一层的目标是把起始柱x上n-1个移动到缓冲柱y上,这一阶段完成后,x上就是1,直接从x移动到z;
>1>第一层目标是把x上n-1移动到缓冲柱y上,即x是初始柱,y是目标柱,z是缓冲柱,就需要完成第二层目标将x上n-2(即:(n-1)-1)通过y柱移动z,这时y是缓冲柱,z是目标柱,这一步完成之后,x上只有1,直接从x移动到z;
Python递归函数解决
直接上代码和运行结果
>>>def move(n,x,y,z):if n==1:print(x,'==>',z)else:move(n-1,x,z,y)print(x,'==>',z)move(n-1,y,x,z)>>> move(1,'A','B','C')A ==> C>>> move(2,'A','B','C')A ==> BA ==> CB ==> C>>> move(3,'A','B','C')A ==> CA ==> BC ==> BA ==> CB ==> AB ==> CA ==> C
反推验证
最后,我们再反推下函数运算过程,以move(3,’A’,’B’,’C)为例:
python递归函数例子_Python递归函数经典案例-汉诺塔问题相关推荐
- 汉诺塔python创新设计_递归经典案例汉诺塔 python实现
最近在廖雪峰大神的教程学习python 学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,因此本人以为能够写篇博客来表达一下本身的看法.这markdown编辑器还不怎么会 ...
- python汉诺塔游戏_Python实战:搭建汉诺塔小游戏,快和小伙伴一起玩玩吧
汉诺塔游戏:看谁能在短时间内将排好顺序的圈,按同样的顺放在另一根柱子上,每次只能动一个. 今天用python搭建汉诺塔小游戏(简约版) 代码亲测有效!源代码如下: #左中右塔用一个列表存储 left ...
- 经典递归算法——汉诺塔问题
一.问题背景简介 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如图1).游戏的目标: ...
- 【函数递归调用】递归调用经典问题—汉诺塔问题
1.函数的递归调用 函数可以直接或者间接的调用其自身,这称为函数的递归调用.递归算法的实质是将原有的问题逐层拆解为新的问题,而解决新的问题又用到了原问题的解法,因此可以继续调用自身分解,按照此原则一直 ...
- 堆栈思想案例—汉诺塔问题求解最小步数
文章目录 前言 一.何为汉诺塔 二.问题分析 三.算法实现 前言 汉诺塔是一款有趣的智力游戏,其求解问题在数据结构与算法中也是堆栈思想和递归思想的典型案例. 一.何为汉诺塔 如图所示:有A.B.C三个 ...
- Java递归基础案例-汉诺塔
汉诺塔问题 /** * Title: 汉诺塔问题 * Description:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上. * 有一个和尚想把这64个 ...
- 汉诺塔python非递归实现,[Python3 练习] 006 汉诺塔2 非递归解法
题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...
- 递归经典例题 --- 汉诺塔(图文详解)
目录 一.介绍 二.游戏规则 三.玩法简介 四.算法分析 五.代码解析 六.源码 七.递归过程详解 一.介绍 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵 ...
- python编程例子_Python的经典入门书籍有哪些?这5本值得一看
人工智能时代的来临让Python崭露头角,语法简洁.功能强大的特性更是吸引了很多人学习Python.由于某些条件的限制,有部分人选择自学Python,而需要什么书籍资料成为困扰她们的一大难题.Pyth ...
最新文章
- C++ 笔记(31)— 类继承
- 产品Backlog(Product Backlog)是什么?
- 怎么查看linux是不是as7u4,Linux下搭建Android开发环境
- Android Studio 中文显示方块□□问题解决
- SpringCloud集成Security安全(Eureka注册中心)
- android studio 经验
- 力扣题目——103. 二叉树的锯齿形层序遍历
- php图片颤抖,PHP-使用jquery 怎么做出图片的震荡效果
- 优动漫PAINT入门宝典——颜色配置实例展示
- 通过互联网进行远程桌面连接
- 使用FFmpeg将文件转为ts
- 商品订单从购物车页面提交
- LeetCode笔记05:最长公共前缀
- 【第九章】vim程序编辑器
- Pr 入门教程了解基本校正选项
- 【嵌入式数据库原理与应用笔记】介绍,系统结构
- 中移M5311模块MQTT协议连接阿里云物联网平台(干货)
- Vuforia Object Scanner
- 基于Arduino的语音识别垃圾箱
- DevOps实战系列【第八章】:详解Jenkins集成Docker私服Nexus3
热门文章
- rac archiving
- 触摸板把计算机从休眠状态唤醒,win10笔记本盒盖唤醒后触摸板失灵的处理方法...
- Dagger2利器系列二:懒/重加载+Component 的组织关系
- java gef_GEF最简单的入门-helloword(1)
- SDUT 2084 DOTA-人王之战(博弈论)
- ANSI、C99、C11 标准区别详解
- Linux openssl 生成证书的详解
- 05.【Java】字符串(String与StringBuffer)
- 第二章:python必备基础语法
- IDEA mybatisplus 代码生成器的配置