PM_Chap8递归程序设计及其正确性证明.pptVIP

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PM_Chap8递归程序设计及其正确性证明

第8章 递归程序设计及其正确性证明 1. 概述 2. 递归程序的正确性证明 3. 递归程序向非递归程序的转换 4. 函数型程序设计简介 8.1 概述 1. 迭代与递归 递归的概念 一个函数、过程或者数据结构,如果在他们的定义内部又出现了定义本身的应用, 则称这个函数、过程或者数据结构是递归的,或者是递归定义的. 直接递归:若程序P包含着对自己的引用,则称为是直接递归的 间接递归:若程序P包含着对另一程序Q的引用,而Q又直接或间接地引用P,则称为间接递归。 例: 8.1 概述 递归的概念(续) int fact(int n) { if (n=0) return 1; else return n*fact(n-1); } 8.1 概述 递归实质是一种循环结构,他把较复杂情形的计算逐次地归结为“较简单”情形的计算,一直归结到“最简单”情形的计算,并得到计算结果为止。 每个迭代程序原则上总可以转换成与它等价的递归程序;反之不然,并不是每个递归程序都可以转换成与他等价的迭代程序。 递归程序的效率(时间和空间效率)比迭代程序低。 递归程序较容易理解和阅读、实现直观 8.1 概述 2. 递归程序的一种模型 一种简化的函数递归程序模型的一般形式如下: F(x1,x2,…,xn) ? if p1 then E1 else if p2 then E2 …… else if pm then Em else Em+1 其中,pi(i=1,2,…,m)是测试谓词,Ei(i=1,2,…,m+1)是表达式。其中F可以在Ei和pi中出现。 8.1 概述 2. 递归程序的一种模型 例1:求非负整数x和y的最大公约数GCD(x,y) GCD(x,y) ? if x=0 then y else if yx then GCD(y,x) else GCD(x,y-x) 其中,x,y?0,且不同时为0。 例2:计算Fibonacci函数 F(x) ? if x=0 then 0 else if x=1 then 1 else F(x-1)+F(x-2) 其中,x为非负整数。 8.1 概述 3. 递归计算的计算规则 例1. F(x1,x2) ? if x1=0 then 0 else F(0,F(x1,x2)) 其中(x1,x2)为非负整数对。计算F(1,2) (1) 规定先计算F的最外层调用 F(1,2) = F(0,F(1,2)) =0 (2) 规定先计算F的最内层调用 F(1,2)=F(0,F(1,2))=F(0,F(0,F(1,2)))=… 8.1 概述 3. 递归计算的计算规则 例2:Ackermann函数 A(x1,x2) ? if x1=0 then x2+1 else if x2=0 then A(x1-1,1) else A(x1-1,A(x1,x2-1)) 其中,(x1,x2)为非负整数对。计算A(1,2). (1)规定先计算F的最外层调用 A(1,2)=A(0,A(1,1)) = A(1,1)+1 = A(0,A(1,0))+1 = A(1,0)+1+1 = A(0,1)+2 = 2+2 =4 8.1 概述 3. 递归计算的计算规则 (1) 递归程序可以采用不同的计算规则来计算: 最内最左规则:先计算最内层的最左的调用 最外最左规则:先计算最外层的最左的调用 (2) 采用不同的计算规则计算递归时,对相同的自变元,计算过程可能终止,也可能不终止。 (3) 若对于不同计算规则,相应的递归程序,对相同的自变元计算过程都终止,则他们所得的计算结果一定相同。但计算效率不同。 (4) 例:PASCAL、Algol语言使用最内最左规则 8.2 递归程序的正确性证明-结构归纳法1 1. 结构归纳法—证明递归程序的部分正确性 证明步骤: 证明对于“最简单”的

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档