- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * 数 据 结 构Data Structures 化志章 江西师范大学计算机信息工程学院 E-mail: hzz@jxnu.edu.cn */27 数 据 结 构 引言 第一章 概论 第二章 线性表 第三章 广义表、字符串、数组和特殊矩阵 第四章 递归技术 第五章 树和二叉树 第六章 图 第七章 检索 第八章 内排序 第九章 外排序 第十章 动态存储管理 */27 递归的含义 递归的含义 用递归思想设计算法 递归调用和递归执行过程分析 递归调用及其特点 普通函数调用执行过程分析 递归调用的分类及递归调用过程分析 递归程序转非递归程序 简单递归程序向非递归程序的转换 复杂非递归程序的设计 第四章 递归技术 */27 1. 1 递归的含义 递归:与数学归纳法相似:假定已知,求出未知。 它是一种算法技术,将较大问题归约到一个或多个子问题的求解过程,这些子问题与原问题结构相同,但规模更小。 结构相同,可以用相同解法; 规模更小,可降低难度 递归刻画的基本元素:递推关系 +初始条件 递推关系,就是把大问题分解成子问题的一种函数关系。它刻画的是问题如何分解。换言之,刻画如何根据子问题求解出原问题; 例如:sum(n)=sum(n-1)+n if n0 初始条件,就是问题的最简单状态,可直接获得解。或者说是最小规模的子解。初始条件刻画了问题分解的尽头 。 例如:sum(n)=0 if n=0 */27 1. 1 递归的含义 举例:求S(n)=1+2+3+……+n. S(n-1)= 1+2+3+……+(n-1)有 S(n)=S(n-1)+n ……递推关系 S(0)=0 ……初始条件 递归函数为 S(n)= 0 if n=0 S(n-1)+n if n0 错误的递归函数为 S(n)= 0 if n=0 S(n+1)-(n+1) if n0 S(5)=S(4)+5 S(4)=S(3)+4 S(3)=S(2)+3 S(2)=S(1)+2 S(1)=S(0)+1 S(5)=15 S(0)=0 递归与数学归纳法相似:假定已知,求出未知。 例如,对在求解sum(n)时,假定sum(n-1)已知,这样有 sum(n)=sum(n-1)+n ——假定已知子问题的解,求原问题的解。 递归与迭代 递归:先自顶向下降解问题规模至初始,再实施迭代至结果。低效,源于重复的函数调用;即问题分化成结构相同的子问题,自顶向下产生计算序列,用递归调用实现计算过程; 迭代:自底向上的计算过程,高效,无重复的函数调用。用循环实现计算过程。 1. 2 用递归思想设计算法 策略1:归纳求解 前提:首先将各递归子解排成一个序列F(0),F(1),…,F(n),称为问题求解序列。其中F(0)是初始状态,F(n)是最终欲求的结果。 先求出初始条件F(0); 假设F(0),…,F(i-1)已知,0≤i≤n,利用尽可能少的已知,给出求解F(i) 的表达式,求解递推关系。 利用初始条件和递推关系构造程序。 例如,求解0~n的累加和, sum(n)=0+1+2+……+n 易得初始条件:sum(0)=0; 先欲求解sum(i),假定sum(0) ~ sum(i-1)均已知,有: sum(i)=0+1+2+...+(i-1)+i =sum(i-1)+i; //得递推关系 */27 */27 1. 2 用递归思想设计算法 递归程序设计的策略 先定义好初值,即可能的结果 再制定降解的策略,即迭代条件。 ——即给出问题的递归定义或递归方程。 递归的优势和局限 优势:简单、易与思考、易于理解 缺点:执行效率差。即:数据交换时间长, 所需临时空间大 */27 12 23 3 34 4 4 45 5 5 5 5 print( int n ){ if(n=0) return; print(n-1); 打印第n行; printf(\n); } 解题关键:给出问题的递归描述 打印函数为print(n), 1、若n=0,不打印; 2、若n1,先输出print(n-1),再打印第n行。——关键是比较print(n)和print(n-1)结果上的差别 例1:试编写一个递归函数,在第一行打印输出1个1,在第二行打印输出2个2, ……在第n行打印输出n个n。例如,当n=5时,调用该函数的输出结果为(注意,要包含空格) 1. 2 用递归思想设计算法
文档评论(0)