数据结构ch05 递归.pptx

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 递 归;在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。 若调用自身,称之为直接递归。 若过程或函数A调用过程或函数B,而B又调用A,称之为间接递归。 在算法设计中,任何间接递归算法都可以转换为直接递归算法来实现,所以主要讨论直接递归。 如果一个递归过程或递归函数中递归调用语句是最后一条执行语句,称为尾递归。;【例5.1】以下是求n!(n为正整数)的递归函数。它属于什么类型的递归。;递归算法通常通常把一个大的复杂问题层层转化为一个或多个与原问题相似的规模较小的问题来求解。 递归策略只需少量的代码就可以描述出解题过程所需要的多次重复计算,大大减少了算法的代码量。;一般来说,能够用递归解决的问题应该满足以下3个条件:;5.1.2 何时使用递归;2. 数据结构是递归的;求一个不带头结点单链表p中所有data成员(假设为int型)之???。;3. 问题的求解方法是递归的;def Hanoi(n,X,Y,Z): #Hanoi递归算法 if n==1: #只有一个盘片的情况 print(将第%d个盘片从%c移动到%c %(n,X,Z)) else: #有两个或多个盘片的情况 Hanoi(n-1,X,Z,Y) print(将第%d个盘片从%c移动到%c %(n,X,Z)) Hanoi(n-1,Y,X,Z);n=4;5.1.3 递归模型;f(n)=1 n=1 f(n)=n*f(n-1) n1;;5.1.4 递归与数学归纳法;;;遇到递归出口发生“质变”,原递归问题便转化成可以直接求解的问题。 求值过程: ;例如求5!。;系统内部如何执行递归算法;;main();用递归算法的形参值表示状态,由于递归算法执行中系统栈保存了递归调用的值参、局部变量和返回地址。 所以在递归算法中一次递归调用后会自动恢复该次递归调用前的状态。;执行f(4)的结果;5.1.6 Python中递归函数的参数;def fun(i,lst): print(id(i),id(lst)) if i=0: print(lst[i],end= ) fun(i-1,lst) #主程序 L=[1,2,3] fun(len(L)-1,L);lst=[1,2,3] def fun(i): print(id(i),id(lst)) if i=0: print(lst[i],end= ) fun(i-1) #主程序 fun(len(lst)-1);5.1.7 递归算法的时空分析;1. 递归算法的时间分析;设大问题Hanoi(n,x,y,z)的执行时间为T(n),则小问题Hanoi(n-1,x,y,z)的执行时间为T(n-1)。递推式:;T(n)=1 当n=1时 T(n)=2T(n-1)+1 当n1时;2. 递归算法的空间分析;设大问题Hanoi(n,x,y,z)的占用空间为S(n),则小问题Hanoi(n-1,x,y,z)的占用空间为S(n-1)。递推式:;S(n)=S(n-1)+1 =S(n-2)+1+1=S(n-2)+2 =… =S(1)+(n-1)=1+(n-1) =n=O(n);确定问题规模n;5.2 递归算法的设计; (1)对原问题f(s)进行分析,称为“大问题”,假设出合理的“小问题”f(s’) ; ;【例5.2】采用递归算法求整数数组a[0..n-1]中的最小值。;f(a,i)=a[0] 当i=0时 f(a,i)=MIN(f(a,i-1),a[i]) 其他情况;5.2.2 基于递归数据结构的递归算法设计;【例5.3】假设有一个不带头结点的单链表p,完成以下两个算法设计: (1)设计一个算法正向输出所有结点值。 (2)设计一个算法反向输出所有结点值。;a0;a0;;5.2.3 基于归纳方法的递归算法设计;【例5.4】若算法pow(x,n)用于计算xn(n为大于1的整数)。完成以下任务: (1)采用递归方法设计pow(x,n)算法。 (2)问执行pow(x,10)发生几次递归调用?求pow(x,n)对应的算法复杂度是多少?;解:(1)设f(x,n)用于计算xn,则有以下递归模型:;(2)执行pow(x,10)的递归调用顺序是: pow(x,10) → pow(x,5) → pow(x,2) → pow(x,1) 共发生4次递归调用。 求pow(x,n)对应的算法复杂度是O(log2n)。;【例5.5】创建一个n阶螺旋矩阵并输出。例如,n=4时的螺旋矩阵如下: 1 2 3 4 12 13 14 5 11 16 15

文档评论(0)

183****6280 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档