python汉诺塔_python 汉诺塔
汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。问:如何移?最少要移动多少次?汉诺塔是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
每次只能移动一个圆盘;
大盘不能叠在小盘上面。
提示:可将圆盘临时置于A杆,也可将从B杆移出的圆盘重新移回B杆,但都必须尊循上述两条规则。
问:如何移?最少要移动多少次?
python实现方法:递归法
我们最终得到的结果是将所有的圆盘按规定的方法从B移到C,对于C来说,当第n个盘子(最大的那个盘子)移动到C时,已经固定了,以后的操作都不用动这块盘子,而当这个盘子从A移动到C的前一步是其它n-1个盘子应该是在B上了,依次类推,当第n-1个盘子从B移动到C前,之前的n-2个盘子应该是在A上
总结以上的思路,可以将整个过程分三步走:
Step1.把除了最大的环之外的环,从A移动到B
A -> B
Step2.将最大的环从A移动到C
A -> C
Step3.把除了最大的环之外的环,从B移动到C
B -> C
参照下图
(a)是初始状态,也就是递归的起点,我们假设n=4, move(4,A,B,C)还是请参考现在最高的分的代码哈~写这个是帮助大家更清楚那个让人压力大的(“抽象”)两个字,哈哈
(b)是step1完成的时候的状态,已经将所有的n-1,这里也就是3个环从A挪到了B
(c)是step2,此时需要将第n个,也就是第四个最大的环从A挪到C
C")>
(d)是step3,此时需要将B上面的n-1个环从B挪到C
Python编写代码如下:
#!/usr/bin/python
def move(n,a,b,c):
If n == 1:
Print(a,’-->’,c)
else:
Move(n-1,a,c,b) #将A上面的n-1个盘子通过C移动到B
Move(1,a,b,c) #将A上最大的那个盘子通过B移动到C
Move(n-1,b,a,c) #将B上的n-1个盘子通过A移动到C
python汉诺塔_python 汉诺塔相关推荐
- python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解
汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...
- 汉诺塔II|汉诺塔4柱
汉诺塔II|汉诺塔4柱 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根 ...
- 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。
import java.math.BigInteger; /* * 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序 ...
- 汉诺塔III 汉诺塔IV 汉诺塔V
汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】
汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...
- 一、汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的。A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆
一.汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘:大盘不能叠在小盘上面.提示: ...
- hanoi塔(汉诺塔)--C语言
hanoi塔(汉诺塔)–C语言 一.什么是hanoi塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄 ...
- C++汉诺塔问题(河内塔)
C++汉诺塔问题(河内塔) 这是一个非常经典的递归问题. 递归:在函数内部又再次调用函数自身的问题 假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中. 1.首先需要把n-1个盘子移 ...
- python:实现布赖恩·克尼汉法算法(附完整源码)
python:实现布赖恩·克尼汉法算法 def get_1s_count(number: int) -> int:"""Count the number of se ...
最新文章
- 找出1000以内的完数,所谓完数是指该数的各因子之和等于该数,如:6 = 1+2+3。
- Git权威指南-51CTO读书
- win10系统中环境变量path变成一行显示(配置环境)
- think-in-java(9)接口
- [Eclipse插件] Eclipse设置Tab键为空格(ctrl+shirt+f格式化生效)!
- eclipse java混淆打包_Android Studio和eclipse混淆打包总结
- java NIO网络编程之SelectionKey
- SQLSERVER2005行版本控制的使用总结
- 在 .NET 中设置页面元素的 javascript 事件 - IEBrowser [5]
- 阿里代码规范检查工具的安装使用
- 项目经理面对矛盾冲突是怎样解决的
- 山西大同大学教务处学生端--送给学弟,学妹的礼物,可在PC端,手机端操作
- 只说了一句话,产品经理乖乖由我调整项目排期《打工人的那些事》
- Phpcms v9建站详细流程
- 微信开发必备工具:利用cpolar在公网上测试本地Web网站或移动应用程序
- 嵌入式系统开发笔记89:认识AVR微控制器系统架构
- 计算机电缆参数,计算机电缆的几个参数要求
- MyBatis基于XML的使用——缓存
- git rebase -i_git rebase -i改变生活的魔力
- Wdf框架之WdfObject状态机(3)-前篇
热门文章
- DTC 2019 数据技术嘉年华·金融峰会(深圳站)来袭,直面架构君
- Python关于def函数的介绍
- 成功解决:Activiti HikariPool-1 - jdbcUrl is required with driverClassName.
- Excel——在报表中实现隔行求和?隔两行求和?隔三行求和?...隔n行求和...
- 中通科技是如何建模并高效处理车辆上的时序数据的
- element-plus table表格换行变色以及部分el自带样式的修改
- arnold渲染vr视频全景视频
- IDEA中如何设置文件头注释和方法注释(详解)
- 听我说说我的博客: 月访问量过万的个人IT博客的技术史 1
- mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc