题目:
  • 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?
    有两个限制条件,第一个是每次只能够移动一个圆盘,第二个是大圆盘只能在小圆盘下面
思路:
  1. 如果1个盘子,你直接可以从第一根柱子移动到最后一根柱子就可以了
  2. 如果有两个盘子,第一你需要先把上面的盘子,从start柱子移动到middle柱子去,第二需要把下面的盘子,移动到最后那个盘子中最后那个柱子上,最后把上面的盘子从middle柱子上移动到end柱子上。
  3. 假设n个盘子,即函数f(n),第一步把上面的n-1盘子通过end那个空柱子最终移动到middle柱子,第二步把下面的大盘子移动到end柱子上去,第三步把上面的n-1个盘子通过start这个空柱子按照限制条件移动到end柱子上去
   /***  汉诺塔*  * @param n 盘子的数量* @param start 开始柱子* @param middle 中介柱子 也就是那个空闲柱子* @param end  放结果柱子 也就是你通过移动,将这个盘子移动到哪个柱子上* 树的中序遍历*/public static  void hanoi(int n,int start,int middle,int end){if (n <= 1){System.out.println(start + "---->" +end);}else{hanoi(n-1,start,end,middle);System.out.println(start + "---->" +end);hanoi(n-1,middle,start,end);}}// 测试用例hanoi(3,1,2,3);// 打印结果:1---->31---->23---->21---->32---->12---->31---->3
小结

汉诺塔的时间复杂度是指数级别的,分析如下:假设我们要挪动n个圆盘,记为T(n),首先需要挪动n-1个圆盘,记为T(n-1),然后再挪动1个圆盘,记为O(1),最后还需要再挪动n-1个圆盘,这样的话的T(n)=2*T(n-1) + O(1),
这个公式解出来的话,也就是 T(n)=2^n.
也就是说每增加挪动一个圆盘,移动步骤几乎是之前的两倍

递归和循环----汉诺塔相关推荐

  1. 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。

    目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...

  2. 递归(二)-------经典递归实例(汉诺塔问题)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),现在来讨论一下另外一个经典的递归例子:汉诺塔问题: 问题描述:在 ...

  3. JAVA(4)学习笔记:JVM虚拟机上的栈、大驼峰命名法和小驼峰命名法、实参和形参、重载方法、调用栈、递归练习(汉诺塔+斐波那契数列)、数组的定义、数组的初始化、增强for循环。

    接上次的博客:JAVA学习(3)--知识整理以及一些简单程序(猜数字游戏.求各种自幂数.求出一个数字的二进制位中1的个数.获取一个数二进制序列中所有的偶数位和奇数位.求公约数的多种实现方式.输入密码程 ...

  4. 汉诺塔python创新设计_递归经典案例汉诺塔 python实现

    最近在廖雪峰大神的教程学习python 学到递归的时候有个汉诺塔的练习,汉诺塔应该是学习计算机递归算法的经典入门案例了,因此本人以为能够写篇博客来表达一下本身的看法.这markdown编辑器还不怎么会 ...

  5. 【使用递归玩通关汉诺塔游戏】算法01-递归(斐波那契数列、汉罗塔问题)-java实现

    递归 定义:在一个方法(函数)的内部调用该方法(函数)本身的编程方式 简而言之就是 "自己调自己" 在玩游戏之前让我们先对递归有一个简单的了解吧! 5.1 递归简介 递归必须有一个 ...

  6. Java递归基础案例-汉诺塔

    汉诺塔问题 /** * Title: 汉诺塔问题 * Description:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上. * 有一个和尚想把这64个 ...

  7. 个盘子的汉诺塔需要移动几步_坨——理解递归实现quot;汉诺塔quot;代码的关键...

    我记得,大学学C语言时,在函数递归调用那一节有个作业,就是写汉诺塔.不少同学遭遇到困难.在知乎上遇见的就有: 如何理解汉诺塔的递归?​www.zhihu.com 题主发出悲鸣:"--学C++ ...

  8. Python数据结构与算法笔记(二):递归介绍及汉诺塔问题

    递归 内容介绍 func1和func2没有结束条件. 图解func递归过程: 长框代表func3,窄框代表print.函数执行过程是从上至下. 长框代表func4,窄框代表print.函数执行过程是从 ...

  9. 递归法:汉诺塔(快速掌握)

    汉诺塔分析:转换柱子的角色,和辅助柱子 发现从递归角度:将1-N与2-N移动到B之后,在C不动的情况下,并不是同一个等价形式:经过转化之后:以下形式与原来的1-N等价 把1-N-1移动到C,N移动到B ...

最新文章

  1. JVM 与 Linux 的内存关系详解
  2. json字符串中key值下划线命名转换为驼峰命名
  3. SAP Spartacus里modifiedtime的大小写问题
  4. java phantomjs alert_Python+Selenium+PhantomJS脚本中的Javascript警报
  5. nanotime java 博客园_System.nanoTime (计时工具类)
  6. 32g内存 android开发,16G走开 我要32G内存的安卓手机
  7. php限制注册频率,php如何限制某个ip提交的次数
  8. ArcGIS快速制图插件介绍
  9. 【java笔记】Stream流(2):获取流的两种方法
  10. GIS_GDAL java版下载/环境配置/dll配置/API使用文档
  11. 计算机结构体系:系统CPI计算例题(1.5)
  12. android打包报错Detected multiple Kotlin daemon sessions
  13. IAP 程序 跳转问题
  14. Maxima 矩阵及矢量运算 1
  15. HDU-4037-线段树-区间开根号
  16. 14-射频校准的原理和设置
  17. MySQL第三方客户端工具
  18. fishhook-动态修改MachO文件
  19. wfGo 围棋 AI对弈模式
  20. 沃云的rds数据库修改sql_mode

热门文章

  1. 南极区域点坐标单位由decimal degrees到meter转换
  2. 外链推广员的主要工作是什么?
  3. 嗯,一个在北京,一个在南京
  4. [思考] 难的问题到底难在哪儿
  5. 使用PHP生成Excel文件并发送附件到邮箱
  6. 逢节必火,礼盒产品缘何持续上热门?
  7. 学计算机的该怎么自学,如何通过自学快速的学会电脑操作?电脑小白必备学习技巧...
  8. 向勒索病毒说不,是时候重塑数据保护策略
  9. 读书笔记{11} VLAN及其在生产中的应用
  10. emui11是鸿蒙过渡,透过EMUI11看鸿蒙OS 将延续三大原则