(011)我们一起学Python;匿名函数,递归函数

lambda关键字,匿名函数,具有简洁的表达方式,适合做一次性运算,系统会自动回收。

>>> pao = lambda x : x * x + 5

>>> pao(2)

9

>>> gg = lambda x,y : x*y        #支持多个参数
>>> gg(3,8)

24

filter过滤器函数,输出真的值,第一个参数可以是函数也可以是None

>>> list(filter(lambda x: x % 2 + 1,range(20)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> list(filter(lambda x: (x +1) % 2 ,range(20)))

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

map函数,相当于一个映射函数,把输入值依次放进map函数的作用域去执行。

递归函数是人妻,调用自身,必须要回来。

def factorrial(n):
    result = n
    for x in range(1,n):
        result *= x
    return result

def fac(n):
    if n == 1:
        return 1
    else:
        return n * fac(n-1)

number = int(input("请输入一个正整数:\n"))
re = factorrial(number)
print("经典函数%d 的阶乘是 %d\n" % (number,re)) 
re = fac(number)
print("递归函数%d 的阶乘是 %d" % (number,re))

输出结果:

请输入一个正整数:

5
经典函数5 的阶乘是 120

递归函数5 的阶乘是 120

斐波那契数列的递归实现:

def fibonaqi(n):
    if n == 1 or n==2:
        return 1
    else :
        return fibonaqi(n-1) + fibonaqi(n-2)

a = int(input("请输入一个正整数:\n"))
re = fibonaqi(a)
print("%d 的fibonaqi数列用递归算法实现的值为:%d\n" % (a,re))
list1=[]
#如果在fibonaqi函数中没有定义0的输入
#千万要注意他的输入中不能有0

for i in range(1,a+1):
    list1.append(fibonaqi(i))  
print("fibonaqi数列为:",list1)

输出:

请输入一个正整数:
20
20 的fibonaqi数列用递归算法实现的值为:6765


fibonaqi数列为: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

汉诺塔游戏的实现,输入64的话能跑半天!!!输入128是很刺激的

def hanoi(n,x,y,z):
    if n == 1:
        print(x,"-->",z)
    else:
        hanoi(n-1,x,z,y)
        print(x,"-->",z)
        hanoi(n-1,y,x,z)
n = int(input("请输入汉诺塔的层数:"))
hanoi(n,'A','B','C')










猜你喜欢

转载自blog.csdn.net/weixin_34981646/article/details/80780583