- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
如何保证循环的正确执行循环实现重复性计算,循环体可能执行多次。如何保证对各种数据都能正确完成计算?循环中变量不断变化。写循环要考虑变量间的关系,保证某些关系在循环中不变:循环的不变关系。写循环时最重要的就是想清循环中应维持变量间的什么关系才能保证循环结束时变量能处在所需状态。写完循环后应仔细检查是否满足要求。循环不变关系(循环不变量)是理解循环、写好循环的关键。第24页,共49页,星期日,2025年,2月5日问题本例中用循环的函数比用递归定义的好吗?新函数在计算时间上有极大优越性。计算时间由循环次数确定。循环体执行次数大致为n。fib(100)只需约100次循环,几乎察觉不到所花费时间。新函数定义较复杂,有复杂的循环。要理解程序意义,确认函数对任何参数都算出Fibonacci值,需要借助“循环不变关系”的概念和细致分析。注意:这个例子并不是说明递归比循环的效率低。完全可以写出计算fib的同样高效的递归定义的函数第25页,共49页,星期日,2025年,2月5日最大公约数求两个整数的最大公约数(greatestcommondivisor,GCD),写函数longgcd(long,long)解法1从某个数开始,逐个判断当前数是否能同时整除m和n,在这个过程中记录下能同时整除m和n的最大整数。需要用一个辅助变量k记录当前需要判断的数。用一个循环实现k顺序取值初值设为1每次判断完后增1直到k大于m和n中其中的一个为止记下循环过程中出现的新的m和n的公约数,作为新的最大公约数用变量d表示当前的最大公约数初值1(是公约数),遇到新的公约数(一定更大)时记入d第26页,共49页,星期日,2025年,2月5日程序有了d及其初值,k可以从2开始循环。函数定义longgcd(longm,longn){longd=1,k=2;for(;k=mk=n;k++)if(m%k==0n%k==0)d=k;returnd;}参数互素时初值1会留下来,能保证正确第27页,共49页,星期日,2025年,2月5日计算过程示例mnkk=mk=nm%k==0n%k==0d2082是12是是23是否24是是45是否46是否47是否48是否4904第28页,共49页,星期日,2025年,2月5日特殊情况处理一些特殊情况需要处理1)m和n都为0需特殊处理。令函数返回值0;2)若m和n中一个为0,gcd是另一个数。函数的返回值正确。也可直接判断处理;3)m、n为负时函数返回1,可能不对。应在循环前加语句if(m==0n==0)return0;if(m==0)returnn;if(n==0)returnm;if(m0)m=-m;if(n0)n=-n;第29页,共49页,星期日,2025年,2月5日可能方式2换个思路令k从某个恰当的大数开始递减,找到的第一个公约数就是最大公约数。k初值可取m和n中小的一个。结束条件k值达到1或找到了公约数。1总是公约数。程序主要部分可写为:for(k=(mn?n:m);//把k设为n的较小者 m%k!=0||n%k!=0;k--) ;/*空循环体*/returnk;/*循环结束时k是最大公约数*/第30页,共49页,星期日,2025年,2月5日过程示例mnkm%k!=0||n%k!=0d2088是?7是?6是?5是?4否4第31页,共49页,星期日,2025年,2月5日两种方式比较本方法比前一方法简单一些。两种方法的共同点是重复测试。这类方法的缺点是效率较低,参数大时循环次数很多。第32页,共49页,星期日,2025年,2月5日解法2辗转相除法求GCD有著名的欧几里德算法(欧氏算法,辗转相除法)。最大公约数的递归定义:第33页,共49页,星期日,2025年,2月5日例例1gcd1(70,30)m=70,n=30m%n?10gcd(30,10)m=30,n=10m%n?0例2gcd1(65,15)m=65,n=15m%n?5gcd1(15
文档评论(0)