汉诺塔问题递归数学与计算机科学_第1页
汉诺塔问题递归数学与计算机科学_第2页
汉诺塔问题递归数学与计算机科学_第3页
汉诺塔问题递归数学与计算机科学_第4页
汉诺塔问题递归数学与计算机科学_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汉诺塔问题(递归)在数学与计算机科学中,递归(recursion)是指一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在于用有限的语句定义对象的无限集合。一个递归问题可分为递推和回归两个阶段。在递推阶段,把较复杂问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解;在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解。只有同时满足下面三个条件的问题,才能用递归解决。(1)一个问题可以转化为一个与原问题相似的、规模较小的子问题来求解。比如,在n的阶乘的计算中,将n的阶乘的问题转化为n-1的阶乘乘以n,此问题便可解决。(2)这个问题与分解之后的子问题,除数据规模不同,求解思路完全一样。比如,n的阶乘问题中,求解n的阶乘的思路,和求解n-1的阶乘的思路是一模一样的。(3)存在递归终止条件。把问题分解为子问题,再把子问题分解为子子问题,一层一层分解下去,不能存在无限循环,这就需要有终止条件。比如,n的阶乘问题中,0或1的阶乘为1,也就是f(1)=1,f(0)=1,这就是递归的终止条件。递归是很多算法实现的基础,是程序设计中的一种重要思想和机制,如分治、深度优先搜索、动态规划等算法中均用到递归思想。汉诺塔问题汉诺(Hanoi)塔问题是一个经典的运用递归方法解决问题的例子。问题描述:汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三根金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。那么,好多人会问64个圆盘移动到底会花多少时间?古代印度距离现在已经很远,这64个圆盘还没移动完么?我们通过计算看完成这个任务到底要多少时间?计算结果非常恐怖,移动圆盘的次数为2n-1,即18446744073709551615,假设移动一次圆盘用时一秒,一年为31536000秒。那么,18446744073709551615/31536000约等于584942417355年,即约为5850亿年。目前太阳寿命约为50亿年,太阳的完整寿命大约100亿年。所以,整个人类文明都等不到移动完整圆盘的那一天。很多人对汉诺塔的解法产生了兴趣。从一阶汉诺塔到N阶汉诺塔它们是否有规律性的算法?能否编程输出每一次移动的方法呢?这就是本例要解决的问题。输入:输入一个正整数n,表示有n个圆盘在第一根柱子上。输出:输出操作序列,格式为movetfromxtoy。每个操作一行,表示把x柱子上的编号为t的盘片挪到柱子y上。柱子编号为a,b,c,要用最少的操作把所有盘子从a柱子上转移到c柱子上。输入样例:3输出样例:move

1

from

a

to

c

move

2

from

a

to

b

move

1

from

c

to

b

move

3

from

a

to

c

move

1

from

b

to

a

move

2

from

b

to

c

move

1

from

a

to

c解题思路:实现这个算法,可以简单分为以下三个步骤。(1)把第n-1个圆盘由a移到b。(2)把第n个圆盘由a移到c。(3)把第n-1个圆盘由b移到c。从这里入手,加上上面数学问题解法的分析,不难发现,移动的步数必为奇数步。(1)第二步是把a柱子上剩下的一个盘子移到c柱子上。(2)第一步可以看成把a柱子上的n-1个圆盘借助c柱子移到b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论