第2章 递归程序设计-第3次课.pptxVIP

  • 2
  • 0
  • 约1.17千字
  • 约 19页
  • 2025-06-09 发布于河南
  • 举报

;课前视频学习任务;;;课堂提问;课堂提问;课堂提问;;样例程序回顾;样例程序回顾;;习题1:给定一个含n个整数顺序存储的线性表,按分治法思路,采用二分策略,设计一个求出其最大值和最小值算法,编写相应测试程序。要求分别设计出其中求最大值、最小值组合的递归算法和非递归算法。

解题思路:单个元素时,最大值、最小值就是本身;超过1一个元素时可将线性表二分,分别求取前、后两个部分的最大值、最小值,再通过比较得到整个线性表的最大值、最小值,线性表范围可用数组名、起始下标、结束下标表示。递归算法比较简单,非递归算法可参照Hanoi塔非递归思路实现。;习题2:编写程序,读入矩阵行数、列数及所有矩阵元素,矩阵中所有元素均为正整数,计算并打印出矩阵中的最大连通块数。注:如果两个元素值相同,并且上、下、左、右四个方向之一相邻,则称两个元素是连通的;连通关系是可传递的,一个元素的连通元素,也是与它连通元素的连通元素。最大连通块定义为所有连通元素组成的最大集,单个元素也可成为最大连通块。要求分别设计出求连通块数的递归、非递归算法。;样例输入:76

444444

413214

412214

411114

412234

433334

444444

样例输出:6;解题思路:可遍历矩阵所有元素,如果该元素未标识过(所有元素初始状态均未标识过),则将该元素所在连通块所有元素标识出来,并增加连通块统计数。标识一个连通块时,可采用递归方法,先标识该元素,再递归从上、下、左、右四个方向未标识的连通元素出发进行标识;采用非递归方法标识连通块时,可通过栈进行,先将待标识元素(包括它的位置)入栈,然后循环进行下列处理:从栈中取出元素,若该元素已标识(注意,同一个元素可能多次入栈),则进行下轮循环;若该元素未标识,则标识该元素,再将该元素上、下、左、右四个方向未标识的连通元素(包括它的位置)入栈,进行下轮循环。这里采用的是深度优先策略,也可采用广度优先策略(借助于队列),或通过集合合并算法实现。;习题7:*在有些应用中,需要解决有符号大数的运算和比较问题,请在样例Ex2.2基础上,实现有符号大数的加、减、乘运算和比较,输入两个有符号大数,输出它们的和、差、积。

解题思路:参照第1章第9题,建立结构体BigNumber,用来表示有符号大数,包含两个成员:用于表示绝对值的UBigNumber类型value成员和用于表示符号位的整型sign成员;然后,分别设计算法实现两个有符号大数相加、相减、相乘。;补充习题:汉诺塔非递归算法的程序实现;;

文档评论(0)

1亿VIP精品文档

相关文档