- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
子程序的递归和嵌套
子程序的嵌套与递归 1、复习函数与过程——子程序 子程序的定义 定义位置 如何定义? 子程序的调用 在何处调用? 如何调用? 参数的传递 值传递,地址传递 变量的作用域 全局,局部 子程序如何返回值到调用处 函数通过函数名带回值 子程序可通过变量参数和全局变量的方式带回值到调用处 【例1】:输入一个正整数,如果是回文素数则输出“Yes”,否则输出“No” 【分析】定义两个并列关系的函数,分别判断一个数是否为素数和是否为回文数 教材P93 例5-11 递归应用 课堂练习1、program lx1(input,output); var s,n:integer; function f(n:integer):integer; ?begin ? if n=1 then f:=1 else f:=n*n+f(n-1) ?end; begin ?write(‘input n:’);readln(n);s:=f(n);writeln(‘f(’,n,‘)=’,s) end. 该程序的功能是: 。当n的值为6时,程序的运行结果是: 如何设计递归算法? 1.确定递归公式 2.确定边界(终了)条件 递归过程 【例8】:把一个十进制整数转换成K进制数(k10)。 分析 根据数制转换规则,把一个十进制整数转换成K进制数,要用“除K取余”法。也就是用K依次去除这个数及其商,所得余数依次作为K进制数相继的低位数字,一直到商为0即可。 如果我们不用数组存储每次求得的低位数字,怎么让程序按顺序输出K进制的各位数字? 分析 可以用递归的方法实现这一过程。算法过程tentok(number,k)如下: 步一 digit?number mod k; 步二 number?number div k 步三 如果number不为0则调用 tentok(number,k) 步四 输出digit 执行过程分析 例9、汉诺塔问题 有n个半径各不相同的圆盘,按半径从大到小,自下而上依次套在A柱上,另外还有B、C两根空柱。要求将A柱上的n个圆盘全部搬到C柱上去,每次只能搬动一个盘子,且必须始终保持每根柱子上是小盘在上,大盘在下。 var a,b,c,number:integer; procedure move(n: integer;a,b,c:char); begin ???? if n=1 then writeln(a,-,c) ???? else ???????? begin ????????????? move(n-1,a,c,b); ????????????? writeln(a,-,c); ????????????? move(n-1,b,a,c) ???????? end; end; begin ???? write(the number of dish:); ???? readln(number); ???? move(number,’A’,’B’,’C’); end. 【例10】求找出具有下列性质的数的个数(包含输入的自然数n): 先输入一个自然数n(n=500),然后对此自然数按照如下方法进行处理: ①. 不作任何处理; ②. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; ③. 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 样例:? 输入:? 6 满足条件的数为? ?6 ??????????????? 16 ??????????????? 26 ?????????????? 126 ?????????????? ? 36 ?????????????? 136 输出:? 6 【例11】、求m与n的最大公约数 分析:从数学上可以知道求m与n的最大公约数等价于求n与(m mod n)的最大公约数。这时可以把n当作新的m, (m mod n)当作新的n,这样问题又变成了求新的m与n的最大公约数……这种方法我们称为辗转相除法。 设两个整数分别为m和n,将m整除n得到一个余数r,若r=0,则除数n就是最大公约数,否则,将除数作为被除数,余数作为除数继续相除,直到余数=0为止。 【分析】对于一个已确定的数组a[1]至a[n]和一个确定的数m,判断能否使数组a中任意几个元素之和等于m,等价于判断能否从数组a中取任意数使其和为m。 此时若a[n]=m,则可以输出“YES”,否则若n=1,则可以输出“NO”。 否则可以按以下规则进行判断:对于a中任意元素a[n]只有取与不取两种情况: (1)取a[n]: 则此时问题转化为:对于一个已确定的数组a[1]至a[n-1]和一个确定的数m-a[n],判断
文档评论(0)