递归函数

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))

以上是关于递归函数的主要内容,如果未能解决你的问题,请参考以下文章

vue递归组件的一些理解

哈斯克尔。我很困惑这个代码片段是如何工作的

如何在自定义PyYAML构造函数中处理递归?

JavaSE 方法的使用

JavaScript - 代码片段,Snippets,Gist

Java基础之方法的调用重载以及简单的递归