计算机网络课件
- 格式:doc
- 大小:27.50 KB
- 文档页数:2
基本概念题:
6-1 什么叫递归?
6-2 适宜于用递归算法求解的问题的充分必要条件是什么?什么叫递归出口?
6-3 阶乘问题的循环结构算法和递归结构算法哪个的时间效率好,为什么?
6-4 非递归函数调用时系统要保存哪些信息?递归函数调用时系统要保存哪些信息?系统怎样保存递归函数调用时的信息?
6-5 什么叫运行时栈?什么叫运行时栈中的活动记录?
6-6 叙述递归算法的执行过程。
复杂概念题:
6-7 推导求解n阶汉诺塔问题要执行的移动操作(即算法中printf()函数的调用)次数。
6-8 我们讨论过的折半查找函数设计如下:
int BSearch(elemtype a[], elemtype x, int low, int high)
{
int mid;
if(low>high) return -1;
mid =(low+high)/2;
if(x == a[mid]) return mid;
if(x < a[mid]) return (BSearch(a,x,low,mid-1));
else return (BSearch(a,x,mid+1,high));
}
讨论如果把上述折半查找函数中最后两语句改为如下形式能否实现算法的设计要求,为什么?
if(x < a[mid]) BSearch(a,x,low,mid-1);
else BSearch(a,x,mid+1,high);
算法设计题:
6-9 要求:
(1)写出求1,2,3,......,n的n个数累加的递推定义式;
(2)编写求1,2,3,......,n的n个数累加的递归算法,假设n个数存放在数组a中。
6-10 要求:
(1)写出求1,2,3,......,n的n个数连乘的递推定义式;
(2)编写求1,2,3,......,n的n个数连乘的递归算法,假设n个数存放在数组a中。
6-11 设a是有n个整数类型数据元素的数组,试编写求a中最大值的递归算法。
6-12 设计输出如下形式数值的算法。
1
2 2
3 3 3
......
n n n ... n
要求:
(1)把算法设计成递归结构的算法;
(2)画出上述递归算法的调用执行过程;
(3)把算法设计成循环结构。
*6-13 背包问题。
设有一个背包可以放入物品的重量为s ,现有n 件物品,重量分别为w[0],w[1],...,[n-1]。
问题是能否从这n 件物品中选择若干件放入此背包中使得放入的重量之和正好等于s 。
如果存在一种符合上述要求的选择,则称此背包问题有解;否则称此背包问题无解。
试用分而治之的算法设计方法设计求解背包问题的函数。
提示:此背包问题的递推定义如下(其中True 表示有解,False 表示无解):
上机实习题:
6-14 折半查找问题。
折半查找问题的描述见6.1节,折半查找问题的递归算法见例6-2。
要求:
(1)设计折半查找问题的循环结构算法;
(2)设计一个查找成功的例子和一个查找不成功的例子,并设计测试主程序;
*(3)设计一个包含10000个数据元素的查找成功的例子,然后分别调用循环结构的查找算法和递归结构的查找算法,并测试出两种算法在计算机上的实际运行时间。
*6-15 八皇后问题。
设在初始状态下在国际象棋棋盘上没有任何棋子(这里的棋子指皇后棋子)。
然后顺序在第1行,第2行,…,第8行上布放棋子。
在每一行中共有8个可选择位置,但在任一个时刻棋盘的合法布局都必须满足3个限制条件:1)任意两个棋子不得放在同一行上;2)任意两个棋子不得放在同一列上;3)任意两个棋子不得放在同一正斜线和反斜线上。
(1)试用回溯法的算法设计方法编写一个函数,求解并输出此问题的一个合法布局;
(2)试用回溯法的算法设计方法编写一个函数,求解并输出此问题的所有合法布局。
提示:在第i 行布放棋子时,从第1列到第8列逐列考察。
当在第i 行第j 列布放棋子时,需要考察布放棋子后在行方向、列方向、正斜线方向和反斜线方向上的布局状态是否合法,若该棋子布放合法,再递归求解在第i+1行布放棋子;若该棋子布放不合法,移去这个棋子,恢复布放该棋子前的状态,然后再试探在第i 行第j+1列布放棋子。
⎪⎪⎪⎩⎪⎪⎪⎨⎧-≥>----≥>-<><==时所选物品包括且时所选物品不包括且物品件数不能为负数
且总重量不能为负数此时问题有解]1[10)
1],1[(]1[10)1,(1000),(n w n s n n w s KNAP n w n s n s KNAP n s False s False s True n s KNAP。