python学习week5-递归,匿名函数生成器
Posted soulgou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习week5-递归,匿名函数生成器相关的知识,希望对你有一定的参考价值。
1、递归函数
1.1、递归函数的限制
(1)递归一定要有退出条件,并且递归调用一定要执行到这个退出条件;如果没有退出条件,就是无限调用,会耗尽所有资源(栈空间);
(2)递归调用的深度不易过深,Python对递归调用的深度做了限制,以保护解释器;
1.2、递归实例
①、递归实现菲薄拉切数列
# version1:数学公式版本 def fib(n): return 1 if n<3 else fib(n-1)+fib(n-2) print(fib(10)) 分析:此版本虽然看着简洁明了,但是会有很大的效率问题,当n操作35以后计算结果就非常慢 # version2:利用上一次结果 def fib(n,a=0,b=1): # n=3 if n<3: return a+b else: a,b=b,a+b # 0,1=1,1 return fib(n-1,a,b) 分析:版本每次都利用了上一次运算的结果,所以效率相对于第一个版本来说,快了不少; # for循环实现 a,b=0,1 for i in range(10): a,b=b,a+b print(a) 分析:版本二就是根据for循环演变而来
②、递归实现阶乘
def fac(n,sum=1): if n==1: return 1 return n*fac(n-1) def fac(n,sum=1): sum=sum*n if n<2: return sum return fac(n-1,sum) # 版本二将每次计算的结果带入了下一次计算
③、将一个数逆序放入列表
nums=‘1234‘ print(nums[len(nums)-1]) l=[] for i in range(len(nums)-1,-1,-1): l.append(nums[i]) print(l)
# for循环实现
def revert(x): if x == -1: return [] return [nums[x]] + revert(x-1) print(revert(len(nums)-1))
# 列表拼接实现 def revert(x,target=[]): if x: target.append(x[-1]) revert(x[:-1]) return target print(revert(nums))
# 字符串切片实
④、递归解决猴子吃桃问题
‘‘‘ x d1=x//2-1 d2=d1//2-1 d3=d2//2-1 ... ... d9=d8//2-1 ==> 2(d9+1)=d8=d7/2-1 ‘‘‘ peach=1 for i in range(9): peach=2*(peach+1) print(peach) ‘‘‘ 这题得倒着推。第10天还没吃,就剩1个,说明第9天吃完一半再吃1个还剩1个,假设第9天还没吃之前有桃子p个,可得:p * 1/2 - 1 = 1,可得 p = 4。以此类推,即可手算出。 代码思路为:第10天还没吃之前的桃子数量初始化 p = 1,之后从9至1循环9次,根据上述公式反推为 p = (p+1) * 2 可得第1天还没吃之前的桃子数量。
for循环中的print()语句是为了验证推算过程而增加的。代码如下: p = 1 print(‘第10天吃之前就剩1个桃子‘) for i in range(9, 0, -1): p = (p+1) * 2 print(‘第%s天吃之前还有%s个桃子‘ % (i, p)) print(‘第1天共摘了%s个桃子‘ % p) ‘‘‘ # 递归实现 def peach(n=10): if n == 1: return 1 return (peach(n-1)+1)*2 print(peach())
2、匿名函数
3、生成器
4、插入排序
以上是关于python学习week5-递归,匿名函数生成器的主要内容,如果未能解决你的问题,请参考以下文章
Python 生成器 匿名函数 递归 模块及包的导入 正则re
python全栈开发-Day12 三元表达式函数递归匿名函数内置函数