递归函数
Posted zhuangshenhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数相关的知识,希望对你有一定的参考价值。
一 递归函数
直接或间接调用自己
递归函数必须有一个条件,终止无限循环
1.直接调用
# def index(): # print(‘hello‘) # index() # # index() # 循环自己调用自己
2.间接调用自己
# def func(): # print(‘hello‘) # outer() # # def outer(): # print(‘world‘) # func() # # func() # 一直在调用两个函数
3.递归函数的两个阶段
1.回溯:问个问题,问题的程度越来越弱,最终会得到一个结果
2.逆推:从结果往回推最终的出结果
二.算法之二分法
算法:就是快,高效率地解决问题
二分法:从中间开始,再从中间开始,知道找到为止
1.列子:
# l = [1,2,3,4,5,6,7,8,9] # 列表中的数据必须按顺序 # num = 10 # def get_num(l,num): # if num not in l: # print(‘输入有误‘) # return # b = len(l)//2 # if l[b] < num: # mun_right = l[b+1:] # get_num(mun_right,num) # elif l[b]>num: # mun_left = l[:b] # get_num(mun_left,num) # else: # print(num) # # get_num(l,num)
三.三元表达式
三元表达式:和if else相比较,就是条件成立做一件事,不成立做另一件事
语法结构:
值1 if 条件 else 值2 条件成立值1否则值2
x = 3 y = 2 res = x if x > y else y print(res)
四.列表生成式
# 名字的后面加"_nb" l = [‘jason‘,‘egon‘,‘tank‘] res = [‘%s_nb‘%name for name in l] print(res) # 名字后面有"_nb"的留下 l = [‘jason_nb‘,‘egon_nb‘,‘tank‘] res1 = [name for name in l if name.endswith(‘_nb‘)] # 不能够更else print(res1)
五.字典生成式
l1 = [‘name‘,‘password‘,‘hobby‘] l2 = [‘jason‘,‘123‘,‘read‘] dic = {i:j for i,j in enumerate(l2) if j != ‘123‘} print(dic)
六.匿名函数
res = (lambda x,y:x+y)(1,2) print(res) func = lambda x,y:x+y print(func(1,2)) # "x,y"相当于函数的形参 "x+y"函数的返回值
七.内置函数
max
# d = { # ‘jason‘:30000, # ‘egon‘:24224, # ‘tank‘:3234 # } # print(max(d)) # key没有赋值,默认比较的是人名 # # def index(name): # return name # print(max(d,key=lambda name:d[name])) # 比较的薪资,返回的是人名
map
# l = [1,2,3,4,5,6] # # print(list(‘hello‘)) # print(list(map(lambda x:x+5,l))) # 基于for循环
zip
# l1 = [‘name‘,‘password‘,‘hobby‘] # l2 = [‘jason‘,‘123‘,‘read‘] # print(list(zip(l1,l2))) # [(‘name‘, ‘jason‘), (‘password‘, ‘123‘), (‘hobby‘, ‘read‘)]
filter
# l = [1,2,3,4,5] # print(list(filter(lambda x:x != 3,1))) # print(list(filter(lambda x:x != 3,l)))
sorted
# l = [‘jason‘,‘egon‘,‘nick‘,‘tank‘] # print(sorted(l,reverse=True))
以上是关于递归函数的主要内容,如果未能解决你的问题,请参考以下文章