夜光带你走进python开发 (二十九)传奇语言

夜光序言:

如果你越来越冷漠,你以为你成长了,但其实没有。长大应该是变得温柔,对全世界都温柔。

 

正文:函数和递归

函数和程序结构


 函数可以简化程序,函数可以使程序模块化
 用函数将较长的程序分割成短小的程序段,可以方便理解
 程序例子:

 将部分功能从程序中移出作为独立函数
 星号绘制函数


 星号数量计算函数

 


 整体控制函数

 夜光:完整程序可以写为。

 整个程序可读性很强。使用函数的思想编写程序,可以大大增加程序的模块化程度
 程序运行结果为:

递归的定义


 递归:函数定义中使用函数自身的方法
 经典例子:阶乘

n!= n(n-1)(n-2)...(1)


举例:5!=5(4)(3)(2)(1) =5 * 4!
推广: n!=n(n-1)! n! n(n1)(n2)...(1)


 阶乘的递归定义:

 0的阶乘:定义为1
其他数字:定义为这个数字乘以比这个数字小1的数的阶乘


 递归不是循环
 最后计算基例:0!。0!是已知值
 递归定义特征 :
 有一个或多个基例是不需要再次递归的;
 所有的递归链都要以一个基例结尾


递归函数


 通过一个累计器循环计算阶乘
 阶乘的递归定义函数 :

 运行递归函数fact()计算阶乘:

 递归每次调用都会引起新函数的开始
 递归有本地值的副本,包括该值的参数
 阶乘递归函数中:每次函数调用中的相关n值在中途的递归链暂时存储,并在函数返回时使用。

 


 5!的递归调用过程图

 

示例程序:字符串反转


 Python列表有反转的内置方法
 方法1:字符串转换为字符列表,反转列表,列表转换回字符串
 方法2:递归


 此问题的IPO模式:
 输入:字符串
 处理:用递归的方法反转字符串
 输出:反转后的字符串
 基本思想:把字符串看做递归对象


 将字符串分割成首字符和剩余子字符串
 反转了剩余部分后把首字符放到末尾,整个字符串反转就完成了
 字符串反转算法(常犯错误版) :

 此算法运行结果出错 :

 构造递归函数,需要基例
 基例不进行递归,否则递归就会无限循环执行
 Python在900余次调用之后,到达默认的“递归深度的最大值”,终止调用
此递归调用以字符串形式执行,应设置基例为空串


 正确的字符串反转代码(新版):

 运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值