数学归纳法:

数学归纳法有好几种形式,我们这里采用最常见的一种。其他形式,详见。
PS:有时候维基百科+百度百科,对比的看,效果更好。维基更细,但百度百科可以帮助我们总结,例子也更中国思维,更容易理解。

当我们要证明自然数范围内的某种规律时,可采用这种方法:

  1. 当n=1时,规律成立。
  2. 假设n=k时,规律成立。如果可证明n=k+1时,规律依然成立。那么该规律在自然数范围内成立。
    (思想:层层递推)

递归问题:

什么时候使用递归?

  1. 定义是递归的:Fibonacci数列
  2. 数据结构是递归的:链表
  3. 问题解法是递归的:Hanoi塔

Hanoi problem:

特别感谢:https://www.cnblogs.com/xxNote/articles/3965739.html
以及严蔚敏老师的《数据结构》

假设圆盘的个数为n,圆盘编号从上到下依次为1,2,3,4,……n,我们开始从中找规律:

①当 n = 1 时,从 A 移动到 C 显然能够完成,设需要移动的次数是a1。

②当 n = 2 时,由①可知从把 1 号盘子从 A 移动到 B能够完成(B 和 C 是等效的)此时移动次数为a1。


之后把2号盘子移动到C上面此时移动次数为a1 + 1。

这时把1号盘子从B移动到C和①是等价的,

移动后总的移动次数是a2 = a1 + 1 + a1。

③当n = 3时,由②可知移动成下图的效果是可以实现的,

此时移动的次数是a2,接着把3号盘子移动到C上面

此时移动的次数是a2 + 1,这时把1和2号盘子移动到C上面(移动过程中3号盘子始终不会动)和②等效的,移动完成之后如下

移动的总次数是a3 = a2 + 1 + a2

④当n=4时,由③可知移动成下图的效果是可以实现的,

此时移动的次数是a3

把4号盘子从A移动到C

此时移动的次数是a3 + 1

接下来把123号盘子从B移动到C的过程又和③等效了移动之后如下

移动的总次数是a4 = a3 + 1 + a3

数学归纳法,首先,针对具体的问题,我们要归纳总结出规律。从上述例子中,我们可以得出规律:(n>1)

an=an−1+1+an−1a_{n}=a_{n-1}+1+a_{n-1}an​=an−1​+1+an−1​
利用数学归纳法证明:

  1. 当k=1,2时,a2=a1+1+a1a_{2}=a_{1}+1+a_{1}a2​=a1​+1+a1​
  2. 假设当n=k(k>1)时,等式成立:ak=ak−1+1+ak−1a_{k}=a_{k-1}+1+a_{k-1}ak​=ak−1​+1+ak−1​

当n=k+1时:在k+1盘上有k层盘,由(2)和汉诺塔规则知,这k层盘可以挪到B,需要aka_{k}ak​步,k+1盘由A到C需要1步,K层盘由B到C同样需要aka_{k}ak​步。由此可知下式成立:
ak+1=ak+1+aka_{k+1}=a_{k}+1+a_{k}ak+1​=ak​+1+ak​
综上所述,对于Hanoi规律an=an−1+1+an−1a_{n}=a_{n-1}+1+a_{n-1}an​=an−1​+1+an−1​在n>1的自然数范围内都成立。

此外 我们还可以移动n个盘子需要的搬运次数:
an=an−1+1+an−1a_{n}=a_{n-1}+1+a_{n-1}an​=an−1​+1+an−1​ 等价于an+1=2∗(an−1+1)a_{n}+1=2*(a_{n-1}+1)an​+1=2∗(an−1​+1),后式是一个等比数列,比为2.
即:等比数列通项公式为:an+1=2(n−1)∗(a1+1)=2na_{n}+1=2^{(n-1)}*(a_{1}+1)=2^nan​+1=2(n−1)∗(a1​+1)=2n
最后可得:an=2n−1a_{n}=2^n-1an​=2n−1

代码:

// 分治递归思想,递归出口+调用规模变小但相同的处理方法
void Hanoi(int n ,char A, char B, charC)
{if(1==n) move(A, 1,C);else{Hanoi(n-1,A,B,C);   // else中的三句话,就是上边的$$a_{n}=a_{n-1}+1+a_{n-1}$$move(A,n,C);Hanoi(n-1,B,A,C);}
}

总结:

汉诺塔问题属于递归中解法是递归的问题类型,其搬运次数和盘子数量呈指数关系,当盘子数过多,问题需要步骤过多,花费的时间也就越多。

数学归纳法+递归问题之汉诺塔问题相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 递归3: 汉诺塔的递归与迭代实现

    递归实现与main(): /*------------------------------------------------------ 汉诺塔主要是有三个塔座X,Y,Z,要求将从小到大编号为 1, ...

最新文章

  1. 程序员面试题精选100题(20)-最长公共子串[算法]
  2. udhcp源码详解(四) 之租赁IP的管理
  3. 一位大学教师对学生的建议:如何做好研究
  4. 【BZOJ - 3224】普通平衡树(Splay模板题)
  5. NodeJs实现下载Excel文件
  6. find(),find_if(),以及巧妙的函数对象,函数适配器
  7. 深度学习自学(二十九):上下文感知和对规模不敏感的动作重复计数
  8. 《和扬哥一起从零开始学编程》免费、免费、免费
  9. 盘点HTML页面跳转的5种方法
  10. 麦吉尔大学计算机科学申请,加拿大麦吉尔大学计算机科学硕士成功案例分享
  11. matlab归一程序,Matlab三种归一化方法
  12. C语言判断日期是这一年的第几天
  13. 119 李元翼 梧里 徒死無益
  14. 【托福考场考点1】山东大学托福考点详情及考友评价
  15. IOTA,物联网区块链?
  16. 《大魔术师》:给内地闹剧变个“魔术”
  17. python中的ideavim有什么作用_【进击的Vimmer】为什么选择vim
  18. 自监督学习和计算机视觉
  19. golang扫描端口
  20. BufferedWriter的使用及其方法

热门文章

  1. iPhoneX的faceID到底是一种怎样风骚的操作?
  2. 微软洗牌低代码开发市场,引发软件产业生态变局
  3. 乌班图利用指令修改桌面分辨率
  4. Mysql 的自增主键达到最大值,怎么办
  5. MHT: Basic Methods for Data Association(三)Gating
  6. arw是什么格式?arw格式用什么软件打开?arw格式怎么转换成jpg
  7. 由于列表中存在相同实例导致insert_many报错解决办法
  8. Linux程序设计(第4版)
  9. 工业机器人智能制造生产线教学案例
  10. 深入学习sniffer