Python电子教案5-2 函数和代码复用.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数学上有个经典的递归例子叫阶乘,阶乘通常定义为: 为了实现这个程序,可以通过一个简单的循环累积去计算阶乘。观察5!的计算,如果去掉了5,那么就剩下计算4!,推广来看,n!=n(n-1)!。 递归的定义 第三十页,编辑于星期二:二十一点 二十五分。 实际上,这个关系给出了另一种方式表达阶乘的方式: 这个定义说明0的阶乘按定义是1,其他数字的阶乘定义为这个数字乘以比这个数字小1数的阶乘。递归不是循环,因为每次递归都会计算比它更小数的阶乘,直到0!。0!是已知的值,被称作递归的基例。当递归到底了,就需要一个能直接算出值的表达式。 递归的定义 第三十一页,编辑于星期二:二十一点 二十五分。 阶乘的例子揭示了递归的2个关键特征: (1)存在一个或多个基例,基例不需要再次递归,它是确定的表达式; (2)所有递归链要以一个或多个基例结尾。 递归的定义 第三十二页,编辑于星期二:二十一点 二十五分。 微实例5.1:阶乘的计算 递归的使用方法 第三十三页,编辑于星期二:二十一点 二十五分。 fact()函数在其定义内部引用了自身,形成了递归过程。 无限制的递归将耗尽计算资源,因此,需要设计基例使得递归逐层返回。fact()函数通过if语句给出了n为0时的基例,当n==0,fact()函数不再递归,返回数值1,如果n!=0,则通过递归返回n与n-1阶乘的乘积。 递归的使用方法 第三十四页,编辑于星期二:二十一点 二十五分。 由于负数和小数通过减1无法到达递归的基例,即n==0,代码第7行通过abs()和int()函数将用户输入转变成非负整数,该程序输出效果如下: 递归的使用方法 ? 请输入一个整数: 10 3628800 ? 请输入一个整数: 12.345 479001600 第三十五页,编辑于星期二:二十一点 二十五分。 递归遵循函数的语义,每次调用都会引起新函数的开始,表示它有本地变量值的副本,包括函数的参数。图5.13给出了计算5!的递归调用过程,每次函数调用时,函数参数的副本会临时存储,递归中的各函数在运算自己的参数,相互没有影响。当基例结束函数运算并返回值时,各函数逐层结束运算,向调用者返回计算结果。 递归的使用方法 第三十六页,编辑于星期二:二十一点 二十五分。 递归的使用方法 第三十七页,编辑于星期二:二十一点 二十五分。 对于用户输入的字符串s,输出反转后的字符串。 解决这个问题的基本思想是把字符串看作一个递归对象。长字符串由较短字符串组成,每个小字符串也是一个对象。假如把一个字符串看成仅有两部分组成:首字符和剩余字符串。如果将剩余字符串与首字符交换,就完成了反转整个字符串,代码如下。 def reverse(s): return reverse(s[1:]) + s[0] 微实例5.2:字符串反转 第三十八页,编辑于星期二:二十一点 二十五分。 观察这个函数的工作过程。s[0]是首字符,s[1:]是剩余字符串,将它们反向连接,可以得到反转字符串。执行这个程序,结果如下: 递归的使用方法 第三十九页,编辑于星期二:二十一点 二十五分。 这个错误表明系统无法执行reverse()函数创建的递归,这因为reverse()函数没有基例,递归层数超过了系统允许的最大递归深度。默认情况下,当递归调用到1000层,Python解释器将终止程序。 递归深度是为了防止无限递归错误而设计,当用户编写的正确递归程序需要超过1000层时,可以通过如下代码设定。 递归的使用方法 第四十页,编辑于星期二:二十一点 二十五分。 七段数码管绘制 第一页,编辑于星期二:二十一点 二十五分。 数码管是一种价格便宜、使用简单的发光电子器件,广泛应用在价格较低的电子类产品中,其中,七段数码管最为常用。七段数码管(seven-segment indicator)由7段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置,如图5.4所示。 七段数码管绘制 第二页,编辑于星期二:二十一点 二十五分。 七段数码管绘制 第三页,编辑于星期二:二十一点 二十五分。 七段数码管能形成27=128种不同状态,其中部分状态能够显示易于人们理解的数字或字母含义,因此被广泛使用。图5.5给出了十六进制中16个字符的七段数码管表示。 七段数码管绘制 第四页,编辑于星期二:二十一点 二十五分。 本节将延续实例2和第2.4节内容,通过部分turtle库函数绘制七段数码管形式的日期信息。该问题的IPO描述如下: 输入:当前日期的数字形式 处理:根据每个数字绘制七段数码管表示 输出:绘制当前日期的七段数码管表示 七段数码管绘制 第五页,编辑于星期二:二十一点 二十五分。 每个0到9的数字都有相同的七段数码管样式,因此,可以通

文档评论(0)

GCG19881010 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档