汉诺塔是由三根杆子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 汉诺塔相关推荐

  1. python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  2. 汉诺塔II|汉诺塔4柱

    汉诺塔II|汉诺塔4柱 Problem Description 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根 ...

  3. 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。

    import java.math.BigInteger; /* * 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序 ...

  4. 汉诺塔III 汉诺塔IV 汉诺塔V

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】

    汉诺塔问题 设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步: 把n-1层移到第二个上面去(花费f(n-1)) 把最大的移到第三个柱子上面去(花费1) 把n-1层移动到第三个柱子上去(花费f( ...

  6. 一、汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的。A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆

    一.汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘:大盘不能叠在小盘上面.提示: ...

  7. hanoi塔(汉诺塔)--C语言

    hanoi塔(汉诺塔)–C语言 一.什么是hanoi塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄 ...

  8. C++汉诺塔问题(河内塔)

    C++汉诺塔问题(河内塔) 这是一个非常经典的递归问题. 递归:在函数内部又再次调用函数自身的问题 假设有n个盘子,需要把这些盘子从第一根起始柱A移动到第三根目标柱C中. 1.首先需要把n-1个盘子移 ...

  9. python:实现布赖恩·克尼汉法算法(附完整源码)

    python:实现布赖恩·克尼汉法算法 def get_1s_count(number: int) -> int:"""Count the number of se ...

最新文章

  1. 找出1000以内的完数,所谓完数是指该数的各因子之和等于该数,如:6 = 1+2+3。
  2. Git权威指南-51CTO读书
  3. win10系统中环境变量path变成一行显示(配置环境)
  4. think-in-java(9)接口
  5. [Eclipse插件] Eclipse设置Tab键为空格(ctrl+shirt+f格式化生效)!
  6. eclipse java混淆打包_Android Studio和eclipse混淆打包总结
  7. java NIO网络编程之SelectionKey
  8. SQLSERVER2005行版本控制的使用总结
  9. 在 .NET 中设置页面元素的 javascript 事件 - IEBrowser [5]
  10. 阿里代码规范检查工具的安装使用
  11. 项目经理面对矛盾冲突是怎样解决的
  12. 山西大同大学教务处学生端--送给学弟,学妹的礼物,可在PC端,手机端操作
  13. 只说了一句话,产品经理乖乖由我调整项目排期《打工人的那些事》
  14. Phpcms v9建站详细流程
  15. 微信开发必备工具:利用cpolar在公网上测试本地Web网站或移动应用程序
  16. 嵌入式系统开发笔记89:认识AVR微控制器系统架构
  17. 计算机电缆参数,计算机电缆的几个参数要求
  18. MyBatis基于XML的使用——缓存
  19. git rebase -i_git rebase -i改变生活的魔力
  20. Wdf框架之WdfObject状态机(3)-前篇

热门文章

  1. DTC 2019 数据技术嘉年华·金融峰会(深圳站)来袭,直面架构君
  2. Python关于def函数的介绍
  3. 成功解决:Activiti HikariPool-1 - jdbcUrl is required with driverClassName.
  4. Excel——在报表中实现隔行求和?隔两行求和?隔三行求和?...隔n行求和...
  5. 中通科技是如何建模并高效处理车辆上的时序数据的
  6. element-plus table表格换行变色以及部分el自带样式的修改
  7. arnold渲染vr视频全景视频
  8. IDEA中如何设置文件头注释和方法注释(详解)
  9. 听我说说我的博客: 月访问量过万的个人IT博客的技术史 1
  10. mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc