- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
过程与函数 将一个十进制数转化为二进制数 嵌套与递归 在pascal中,子程序也遵循先定义后使用的原则,后面定义的子过程可以调用前面定义的子过程,前面的不能使用后面的,如果前面的函数需要定义后面定义的函数,需要加前导说明(后续再讲) 编程计算n! 世界上偷懒最好的办法就是 有人帮你干活~~~ program jiecheng; var n:integer; y:real; function fac(n:integer):real; begin if n=0 then fac:=1 else fac:=n*fac(n-1); end; begin read(n); y:=fac(n); writeln(n,!=,y:10:0); end. 一定要有结束递归的语句。 写出下面程序的运行结果 练习题(用递归实现) 从接盘接受一串字符,以#结束,然后讲字符串反序输出。 求两个数的最大公约数 参考程序 program test; procedure du; var ch:char; begin read(ch); if ch# then du; write(ch); end; begin du; end. 辗转相除求最大公约数 program test; var a,b:integer; function zz(m,n:integer):integer; var r:integer; begin r:=m mod n; if r0 then zz:=zz(n,r) else zz:=n; end; begin read(a,b); if ab then write(zz(a,b)) else write(zz(b,a)); end. 河内塔问题 汉诺塔问题是源自印度神话。 上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 汉诺塔问题是:三根柱子命名为x,y,z,其中x上有n个直径递增的圆盘(最顶部为最小的圆盘,然后往下一次增大,编号为1到n),现在要把x柱子上的n个圆盘移到柱子z上,要求在移动的过程中不允许出现任何大的圆盘叠放在任何小的圆盘上,柱子y可作中转用)。 现在假设n=3。 我有个好办法,我要移动三个盘子,但是我很懒,我只想做干最少的活,那么怎么办呢?我怎么才能偷懒呢? 这个世界上最好的偷懒的办法就是有人帮你干活,我要把这三个盘子从x柱子借助y柱子移动到z柱子上,请何伟同学上来把上面的1号跟2号两个圆盘借助z柱子移动y柱子上,等学生完成以后写下代码: 何伟:hanoi(n-1,x,z,y);{把n-1个盘子从x借助于y移动z上} 等何伟同学把盘子移动完成以后,我把3号圆盘直接移动到z柱子上就可以了。然后 我:write(n,x,”----”z);{我移动最后一个} 工作还没有完成,剩下的两个盘子还在y柱子上,所以何伟同学把剩下的工作完成:(这也是递归调用完成返回的过程) 何伟:hanoi(n-1,y,x,z);{把在y柱子上圆盘借助于柱子x也搬到z柱子上} 何伟同学很聪明,马上学会了找人来替他移动别的盘子,他只等着移动最后一个。 八皇后问题 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。?高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。 ?有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个;第二天又将剩下的桃子吃掉一半,又多吃了一个;按照这样的吃法每天都吃掉前一天剩下的一半又多一个。到了第10天,就剩下一个桃子。问题,这个桃子第一天摘了多少个桃子。 Function f(m:integer):integer; Var a:integer; Begin if m=0 then f:=3 else f:=f(m-1)+5; End Begin Writeln(f(3)); End. 18 program hannuota; var n:integer; procedure hanoi(n:integer;x,y,z:char); begin if n=1 then write(1,x,---,z) else begin hanoi(n-1,x,z,y); write(n,x,---,z);; hanoi(n-
原创力文档


文档评论(0)