一、汉诺塔问题

汉诺塔(Tower of Hanoi)是一个经典的递归算法问题。它描述的是有三根杆子和若干个不同大小的圆盘,圆盘可以按照大小顺序放在杆子上。初始时,所有圆盘都放在左边的杆子上,目标是将所有圆盘移动到右边的杆子上,并且每次移动时必须遵守下列两个规则:

  1. 一次只能移动一个圆盘。
  2. 不能将大盘放在小盘上面。

为了解决这个问题,我们需要使用递归算法。递归算法是一种解决问题的方法,它使用自身来解决问题。递归解法的基本思路是:

  1. 如果只有一个圆盘,那么可以直接从一根柱子移动到另一根柱子。

  2. 否则,需要先将上面的所有圆盘移动到第三根柱子,再将最下面的圆盘移动到目标柱子,最后将第三根柱子上的圆盘移动到目标柱子。

这样我们就可以使用递归算法来解决汉诺塔问题了。


二、时间复杂度分析

汉诺塔问题解决代码如下:

 我们假设Hanoi的执行时间是T(n),此递归函数中语句if(n==1)move(A, 1, C);的执行时间是O(1);else中递归调用的执行时间是T(n-1),赋值执行时间为O(1),所以执行时间是O(1) + T(n-1)。那么可以得到如下递归方程:

具体运算过程:

T(n) = 2T(n-1) + O(1);

T(n-1) = 2T(n-2) + O(1);

...

T(2) = 2T(1) + O(1).

除第一个式子之外全部*2,并加到上一个式子中,得到:

所以汉诺塔递归解法程序的时间复杂度是2^nO(1)。


三、加入圈子

123456789 110479172

汉诺塔问题的时间复杂度相关推荐

  1. 汉诺塔问题及时间复杂度推导

    汉诺塔问题: 我们设计其圆环从A移动到B: 从小到大分解: n=1时, (A–>B). 一步 n=2时, [A–>C], (A–>B), [C–>B]. 三步 n=3时, [A ...

  2. 汉诺塔(hanio)

    1.汉诺塔的背景: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地 ...

  3. 汉诺塔(Hanoi)递归算法

    相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘. 游戏的目标:把A杆上的金盘全部移到C杆 ...

  4. 八个方面分析汉诺塔问题

    汉诺塔是什么? 汉诺塔问题就是将A柱上n个圆全部移动到C上,过程中可以借助B柱,但要始终保持小圆在大圆上面. 1.自顶向下 逐步求精 "自顶向下, 逐步求精"是一种结构化程序设计常 ...

  5. 利用递归、迭代解决斐波那契数列问题与汉诺塔难题

    有人说,"普通程序员使用迭代,天才程序员使用递归",真是这样吗? 1.浅谈递归与迭代 <1>递归的基本概念: 程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个 ...

  6. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  7. 算法练习day15——190403(简介、求n!、汉诺塔、打印字符串的子序列、打印字符串的全排列、母牛生小牛、最小路径和、累加和是否达到给定值)

    1. 简介 动态规划是为了优化暴力尝试的. 2. 求n! 2.1 一般思路 public static long getFactorial2(int n) {long result = 1L;for ...

  8. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  9. Python 算法之递归与尾递归,斐波那契数列以及汉诺塔的实现

    文章目录 递归概念 递归要素 递归与迭代的区别 示例一:阶乘 示例二:斐波那契数列 示例三:汉诺塔问题 尾递归 Python 中尾递归的解决方案 递归概念 递归:程序调用自身的编程技巧称为递归( re ...

最新文章

  1. html 页间传送数据,js 不同页面间传递值并取值,html不同页面间数据传递
  2. 简单了解各种序列化技术-JSON序列化框架
  3. 数据库SQL基础知识点
  4. cnblogs_504 Gateway Time-out
  5. 《Unit Testing》1.4. 成功的测试套件拥有哪些属性?
  6. CF 1635E Cars 二分图 + 拓扑
  7. vector 不初始化时什么状态_练车时,教练为什么不给你开空调?
  8. devops与itsm集成_如何解决DevOps与ITSM文化冲突
  9. Linux 吉祥物30岁了!“出道”30年,你对Linux了解多少?
  10. 使用MemCache进行相关缓存的保存处理
  11. bzoj 3028 食物——生成函数
  12. 一个删除文件的批处理
  13. matlab的repmat函数和mean函数,sum函数
  14. 大数据技术原理与应用 第1章 大数据概述
  15. CreatePipe/CreateProcess
  16. 在VMware下新建虚拟机Win10系统
  17. 如何用C++制作游戏(每天分享一个制作小技巧)
  18. java 检测表情符号_java 过滤表情符号
  19. 使用vi编辑器编辑一个C语言源程序hello.c,并使用编译工具GCC编译该源程序。
  20. Typora基本使用Markdown基本语法:精炼且详细

热门文章

  1. C语言 计算x的n次幂
  2. 常用汉字的UNICODE和对应的繁体字
  3. vb读取文本文件某行的内容
  4. word的表格解决左对齐但不在左边,对齐不正常
  5. Python+Vue计算机毕业设计停车场管理系统8f46a(源码+程序+LW+部署)
  6. linux buffer io error,Linux Buffer I/O error on device dm-4, logical block,dm-4logical
  7. 虚拟环境中cuda版本与系统cuda版本不同有什么影响
  8. 小程序钉钉语音录入组件
  9. zzuli oj 1016:银行利率(java)
  10. 激活 window10 操作系统