证明并推导汉诺塔(河内之塔)问题公式
证明可解汉诺塔问题:
我用的是数学归纳法,假设圆盘的个数为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= k时,从A移动到C是可以实现的,那么当n=k+1时,可以移动到A上面只剩k+1号盘子,B上面依次是1,2,3,.....,k号盘字,此时移动次数是ak
把k+1号盘子移动到C上面,这时移动次数是ak + 1
接下来和n=k时移动过程等效,移动完成后移动总次数是ak+1 = ak + 1+ ak
可以得知移动k+1个盘子需要的次数与移动k个盘子的次数之间的关系是:
ak+1 = ak + 1+ ak = 2ak + 1
所以ak+1 + 1 = 2*(ak + 1)【这是个等比数列高中学过的】
即ak + 1 = (a1 +1)* 2n-1 = 2n 因此ak = 2n - 1
至此,证明完毕。
转载于:https://www.cnblogs.com/xxNote/articles/3965739.html
证明并推导汉诺塔(河内之塔)问题公式相关推荐
- PTA汉诺(Hanoi)塔问题
PTA汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动 ...
- 汉诺(Hanoi)塔问题
用C语言解决(Hanoi)汉诺塔问题 首先,我们先给出(Hanoi)汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A ...
- 第10章 例题 7-4 汉诺(Hanoi)塔问题
古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大 ...
- 《程序设计基础》 第十章 函数与程序结构 7-2 汉诺(Hanoi)塔问题 (20 分)
古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大 ...
- 多图详解汉诺塔递归实现思路--含实现代码
前言 为了节约大家的时间,本文对汉诺塔的定义就不做赘述了,如果有小伙伴不清楚汉诺塔的规则可以直接点蓝字跳转过去. 本篇博客内容 汉诺塔实现的思路 用递归的方式实现汉诺塔 汉诺塔实现的思路 我们先以两个 ...
- 【C语言】汉诺塔问题
汉诺(Hanoi)塔问题:假设有命名为A.B.C的三个塔柱,初始时,在塔柱A上插有n个直径大小各不相同的圆盘,从上往下,圆盘从小到大编号为1.2.3.···n,要求将A柱上的圆盘移至塔柱C,可借助塔柱 ...
- 汉诺塔问题(+递推公式)
汉诺塔问题是使用递归解决问题的经典范例. 汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘 ...
- 由递推关系式用差分方程的方法得到通项公式实现求斐波那契数列的第n项;迭代、递归、栈、差分方程之间的本质联系以及由推广的迭代法解决“变态青蛙跳台阶”问题;汉诺塔问题的数字特征以及用递归解决的原理推导。
最近几天在研究算法中一个比较基础且突出的问题,就是关于"递推关系式.递归.迭代.序列前k项和"之间的区别与联系. 一.斐波那契数列与差分方程 首先我们考察一个经典的算法,求斐波那契 ...
- 汉诺塔(图解演算+推导+Python实现)
汉诺塔 文章目录 汉诺塔 前言 时间线 故事背景 问题延申:经典汉诺塔 逻辑演算 代码处理 对象定义 动作定义 递归 计数 代码实现 总结 前言 关于汉诺塔的记忆很早就有了,无论还是益智玩具,还是电影 ...
最新文章
- 第一个helloworld.c实例
- 程序自删除方法大总结
- Google浏览器一开启就提示“请停用以开发者模式运行的扩展程序“解决方案
- NEC红外协议编码,38K红外遥控编码,红外遥控发射接收电路选型设计
- grafana监控oracle11g,Grafana展示zabbix监控数据
- 解决eclipse/myeclipse导入项目时出现红色叹号的方法
- 自动生成xml报文_使用python如何给xml报文进行签名 signXML库
- Linux中hosts文件的修改
- 八种常规常用的SQL查询语句
- 关于C++中的随机数生成器
- python抢票_抢票工具成了GitHub热榜第一,最新支持候补抢票,Python跑起来 | 标星8400...
- 你我许的誓言也许抵不过岁月的云烟
- 软件设计师(中级)详细复习过程总结
- Pytest操作中间件
- Hadoop数据存储
- 机器学习: 01 决策树分类
- termux基本使用教程[通俗易懂]
- 交换机console口连接
- 计算机阅卷英语教学,阅卷英语论文,关于计算机电子阅卷在英语教学中的应用相关参考文献资料-免费论文范文...
- 【亡羊补牢】计算机网络灵魂之问 第11期 tcp三次握手