1、什么是函数递归?

函数递归调用(是一种特殊的嵌套调用):在调用的函数过程中,又直接或者间接的调用了该函数本身

递归必须要有两个明确的阶段:

递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少;

回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层层回溯

递归的精髓在于通过不断的重复逼近一个最终的结果

2、怎么用?

# import sys
# print(sys.getrecursionlimit()) #改递归深度
# sys.setrecursionlimit(3000)
# def foo(n):
# print('from foo',n)
# foo(n+1)
# foo(0)
def foo(n):
if n ==1:
return 10
return foo(n-1)+2
print(foo(5))
a =[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
def tell(a):
for x in a:
if type(x) is list:
tell(x)
else :
print(x)
print(tell(a)) 3、二分法
#二分法
nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,371]
def search(search_num,nums): #传两个参数,一个列表,一个是被检测元素
print(nums)
if len(nums) == 0: #如果是空列表,就没有
print('not exists')
return
mid_index=len(nums) // 2 #取中间的索引值,进而取得所对应的值
if search_num > nums[mid_index]: #判断被检测的元素如果大于列表的中间值
# in the right
nums=nums[mid_index+1:] #截断列表,保留大于中间值的那一段 (从中间值加一的那个值开始,到最后)
search(search_num,nums)
elif search_num < nums[mid_index]: #判断被检测的元素如果小于列表的中间值
# in the left
nums=nums[:mid_index] #截断列表,保留小于中间值的那一段列表
search(search_num,nums)
else:
print('find it') search(34,nums)
4、匿名函数
没有绑定名字用一次就回收了
#有名函数
def fun(x,y):
return x+y
fun(1,2)
#匿名函数格式
res = (lambda x,y: x+y)(1,2)
print(res)
5、内置函数
#max函数应用
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
#取工资最高的人名
#max 工资原理
#首先将salaries由可迭代对象变成迭代器对象,通过next方法将迭代器对象取出的值依次传给key指定的函数
#然后将该函数的返回值当作判断依据
def func(k):
return salaries [k]
print(max(salaries,key = func)) #有参数名方法
print(max( salaries, key=lambda k:salaries[k])) #无参数名方法
# 函数sorted
# l=[10,1,3,-9,22]
# print(sorted(l)) #从小到大排序
# l1=sorted(l,reverse=True ) #从大到小排序
# print(l1)
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
def func(x):
return (salaries[x])
print(sorted(salaries,key=func ,reverse=True ) ) # print(sorted(salaries ,key=lambda k:salaries[k]) ) #工资从小到大
# print(sorted(salaries ,key=lambda x:salaries[x] ,reverse=True)) #工资从小到大
# map 函数
#将可迭代对象a,变成迭代器对象,通过next方法依次取值,将值做为参数传给指定的函数,函数的返回值就是结果之一
# a =['ffr','ggg','uuu','dfgb']
# a1 =map(lambda x:x+'cc', a)
# print(list(a1)) # filter() 函数 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
#将可迭代对象变成迭代器对象,用next 方法依次取值,将值作为参数传给指定的函数,
# filter会判断函数的返回值真假,如果为真留下相应的值 names=['alexSB','egon','wxxSB','OLDBOYSB']
# print([x  for x in names  if x.endswith('SB')]) #列表生成式
names1=filter( lambda x: x.endswith('SB'), names)
print(list(names1))


python 函数递归与匿名函数的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

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

    一. 三元表达式 一 .三元表达式 仅应用于: 1.条件成立返回,一个值 2.条件不成立返回 ,一个值 def max2(x,y): #普通函数定义 if x > y: return x els ...

  3. python之旅:三元表达式、列表推导式、生成器表达式、函数递归、匿名函数、内置函数

    三元表达式 #以下是比较大小,并返回值 def max2(x,y): if x > y: return x else: return y res=max2(10,11) print(res) # ...

  4. Python day5 --------递归、匿名函数、高阶函数、内置函数

    一.递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归要求: 1. 必须有一个明确的结束条件 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减 ...

  5. Python day10 global关键字、函数递归、匿名函数、map函数的用法详解

    1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...

  6. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  7. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  8. python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda

    函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a ...

  9. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    http://www.cnblogs.com/linhaifeng/articles/7580830.html 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数

随机推荐

  1. Html页面添加百度地图

    1.进入百度地图开放平台 http://lbsyun.baidu.com/ 2.进入右上角的   “API控制台” 在这里创建应用 并 获取密钥 3.进入 如下地址 创建地图 http://api.m ...

  2. 处理Task引发的异常

    处理方法:线程启动后,使用try-catch,通过wait或者waitall来捕获异常. 单个Task的情况: System.Threading.Tasks.Task task1 = new Syst ...

  3. Nancy 返回值详解

    简介 Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.它的返回值也是多种多样的,适应各种不同的情况.包括Response.AsFile( ...

  4. Git基础(一) 创建项目仓库

    一.取得Git项目仓库的两种方法: 在现有目录中初始化仓库 git init 如果是在一个已经存在文件的文件夹(而不是空文件夹)中初始化Git仓库来进行版本控制的话,应该跟踪这些文件并提交,通过git ...

  5. linux系统(CentOS7)虚拟机上安装oracle 11g,解决oracle图形界面卡住无法点击next问题

    https://www.cnblogs.com/nichoc/p/6416475.html

  6. scrollReveal.js – 页面滚动显示动画JS

    简介 和 WOW.js 一样,scrollReveal.js 也是一款页面滚动显示动画的  JavaScript ,能让页面更加有趣,更吸引用户眼球.不同的是  WOW.js  的动画只播放一次,而 ...

  7. webpack学习笔记--区分环境

    为什么需要区分环境 在开发网页的时候,一般都会有多套运行环境,例如: 在开发过程中方便开发调试的环境. 发布到线上给用户使用的运行环境. 这两套不同的环境虽然都是由同一套源代码编译而来,但是代码内容却 ...

  8. vue.js学习:1.0到2.0的变化(区别)

    一.生命周期 1.1.0的生命周期: 周期 解释 init 组件刚刚被创建,但Data.method等属性还没被计算出来 created 组件创建已经完成,但DOM还没被生成出来 beforeComp ...

  9. nginx配置http和https共存

    server { listen ; listen ssl; server_name localhost; #ssl on; ssl_certificate /usr/local/Tengine/ssl ...

  10. 【回顾】html属性、标题、段落、文本格式化

    1.HTML 属性 HTML 元素可以设置属性 属性可以在元素中添加附加信息 属性一般描述于开始标签 属性总是以名称/值对的形式出现,比如:name="value". HTML 提 ...