实验时间 | 2024年 4 月10日19时至22时 | 学时数 | 3 |
1.实验名称 分治与减治算法实验:题目3 汉诺塔问题的程序设计 | |||
2.实验目的 (1)掌握递归的有关概念; (2)掌握汉诺塔问题的具体求解过程; (3)在掌握的基础上编程实现汉诺塔的具体实现过程。 | |||
3.实验内容 在A上有按大小排序好的n个金碟,借助B的帮助,将A上的碟子移动到C上,在移动的过程中要严格按照大小顺序,不能将碟子放在比它小的上面,输出结果,输出时要求有文字说明。请任选一种语言编写程序实现上述算法,并分析其算法复杂度。 | |||
递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。递归必须具备以下两个基本要素,才能在有限次计算后得出结果。 (1)边界条件:确定递归到何时终止,也称为递归出口。 (2)递归模式:大问题是如何分解为小问题的,也称为递归体。 由于递归程序比较简洁,而且调用函数和被调用函数是同一个函数,很多人费解甚至怀疑这样简洁的语句是如何实现问题求解的。只有深刻理解了递归函数的运行过程,才能真正理解递归技术,从而设计递归程序。采用图示方法描述递归函数的执行过程,从甲可较直观地了解到递归函数的执行情况,具体方法如下: (1)顺序写出函数执行的各语句,并用有向弧表示语句的执行次序; (2)对函数的每个递归调用,写出对应的函数调用,从调用处画一条有向弧指向被调用函数入口,表示调用路线,从被调用函数末尾处画一条有向弧指向调用语句的下面,表示返回路线; (3)在返回路线上标出本次调用所得的函数值。 当n=3时汉诺塔算法的执行过程如图4.18所示,实线表示深一层递归,虚线表示调用返回,有向弧上的数字表示递归调用和返回的执行顺序。
| |||
9.实验源代码 汉诺塔问题的求解是一个典型的递归求解过程,具体算法如下:
时间复杂度为O(n2) | |||
代码运行截图: ![]() 心得: 进一步熟悉递归。 |
分治与减治算法实验:题目3 汉诺塔问题的程序设计
于 2024-04-15 13:11:02 首次发布