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协程函数递归匿名函数与内置函数使用模块与包

Python 生成器 匿名函数 递归 模块及包的导入 正则re

python全栈开发-Day12 三元表达式函数递归匿名函数内置函数

python_递归_协程函数(yield关键字)_匿名函数_模块

Python中的匿名函数及递归思想简析

python学习day17