大家好,我是老郝。本文就汉诺塔问题向大家阐述递归的思想。

【问题描述】

有三根柱子,最左边的柱子上从大到小放着很多的圆盘,要求把圆盘一个一个的放到最右边的柱子上并且只能小盘子压在大盘子上。(据说古代阿三要他们的和尚把64个圆盘从左到右放一遍,看到最后你就知道阿三多么的无聊……)

这是4个盘子的示意

先用数学归纳法看一下移动盘子次数:

一个盘子 f(1) = 1

两个盘子 f(2) = 3

三个盘子 f(3) = 7

……

f(k+1)=2*f(k)+1 ===> f(n)=2^n-1

阿三每秒移动一个盘子而且不出错的情况下需要:

18446744073709551615秒 > 5845.54亿年

三哥无敌般存在!


不看三哥,看代码

两个函数,show函数用来输出每次移动的结果;move函数为主递归函数用来求解,下面主要分析move函数。

每个递归函数都必须有退出的条件判断

这是递归算法必须具备的,否则就会出现无穷递归导致内存溢出。退出条件可以放在函数头部或者尾部,主要看设计者的思路了,一般情况下建议放在函数头部。

退出递归的条件判断

函数自己调用自己实现递归

递归最大的特点就是函数自己调用自己,由于函数每次执行都是在内存中开辟新的空间,所以每次函数调用都不会丢失或者覆盖原来函数的值。

Move函数中将不同的局部变量作为入参传给调用的自身,直到n == 1为止。

汉诺塔递归的空间复杂度_学习算法绕不开的~~汉诺塔相关推荐

  1. 汉诺塔递归的空间复杂度_算法分析中的空间复杂度,你真的会了么?

    笔者介绍:先后在腾讯和百度采坑,个人公众号:「代码随想录」,分享自己对互联网以及技术的想法与思考.欢迎关注! 什么是空间复杂度呢? 一个程序的空间复杂度是指运行完一个算法所需内存的大小. 空间复杂度( ...

  2. 汉诺塔递归的空间复杂度_【干货】Java算法复杂度

    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 算法复杂度分为时间复杂度和空间复杂度.其作用: 时间复杂度是度量算法执行的时间长短 ...

  3. 汉诺塔递归的空间复杂度_暴力递归与动态规划 1.0

    有些暴力递归不能被改成动态规划,因为他本身要求的解空间无法被压缩了. eg:汉诺塔问题,我们必须打印那些步骤. 如果要写一个动态规划,先写成暴力递归的版本,然后模板化修改. 先写递归版本: 不妨记递归 ...

  4. 汉诺塔递归的空间复杂度_递归思维——快速排序的详细设计过程

    理解递归的运行模型(https://zhuanlan.zhihu.com/p/166173378)之后,就能根据递归函数的静态代码推算执行结果了. 递归思维,是理解递归的基础上,用递归研究并解决问题的 ...

  5. 如何提高强化学习算法模型的泛化能力?

    深度强化学习实验室 官网:http://www.neurondance.com/ 来源:https://zhuanlan.zhihu.com/p/328287119 作者:网易伏羲实验室 编辑:Dee ...

  6. 【招聘推荐】启元世界招聘深度强化学习算法工程师

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑.排版:DeepRL 深度强化学习算法工程师 ...

  7. 【Nature重磅】OpenAI科学家提出全新强化学习算法,推动AI向智能体进化

    深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 编辑:DeepRL 近年来,人工智能(AI)在强化 ...

  8. java汉诺塔递归算法_数据结构--汉诺塔递归Java实现

    1 /*汉诺塔递归2 * 1.将编号0-N-1个圆盘,从A塔座移动到B上面3 * 2.将编号N的1个圆盘,从A移动到C上面4 * 3.最后将B上面的N-1个圆盘移动到C上面5 * 注意:盘子的编号从上 ...

  9. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

最新文章

  1. 为增进理解力而奋斗终身
  2. 面向接口编程详解(一)—— 思想基础
  3. VTK:图片之ImageContinuousDilate3D
  4. 第三十二期:MySQL常见的图形化工具
  5. pythonwindows文件_python查询windows文件
  6. mysql update from 语句_MySQL高频面试题01期:一条update语句的生命历程
  7. 关联规则java apriori_关联规则算法(The Apriori algorithm)详解
  8. fu7推挽胆机音质_fu7电子管功放电路图大全(6N8P\6P3P\胆机功放电路\耦合电容器) - 全文...
  9. 淘宝返利微信公众号怎么使用微信返利机器人查淘宝优惠券及淘宝购物返利?
  10. 微信第三方登录有两种登录方式, 1. 微信开放平台登录 2. 微信公众平台授权登录?
  11. file_put_contents学习笔记
  12. Python re模块,正则表达式
  13. Mac 技巧之苹果电脑 Mac OS X 系统下一键即密码锁定屏幕,防止别人乱用乱看的方法
  14. Java图形化界面编程超详细知识点(9)——Swing_树
  15. C++ Qt自建网页浏览器
  16. WWW 2020|基于人才流动表征的企业竞争力分析
  17. MySQL语法学习笔记
  18. 网络安全 Kali虚拟机的安装和简单使用
  19. 全国计算机等级考试一级练习题,全国计算机等级考试一级练习题
  20. 【Python】近似熵,样本熵,模糊熵计算高效版

热门文章

  1. 8年思科C语言程序员转web独立开发者年收入超10万美元
  2. linux bash sed指令 sed命令(正则表达式替换)替换/etc/selinux/config参数(SELINUX=enforcing -->SELINUX=permissive)
  3. hdu 1248寒冰王座
  4. android系统旋转方向定制问题
  5. 【QQ】精彩QQ自动回复录(经典)
  6. 贝叶斯生成对抗网络(GAN)
  7. java 实现自动生成部署文档_jenkins的部署、实现自动拉取gitlab仓库代码、实现项目中代码自动部署以及项目关联触发......
  8. unity编辑器扩展#3 《Extending Unity with Editor Scripting 》笔记
  9. @JSONField注解的使用
  10. 姓名缘分查询易语言代码