一、递归函数
定义:函数内部可以调用其它函数,如果调用自身,就叫递归。
递归特性:
1.必须有结束条件退出:
>>> def calc(n):
... print(n)
... return calc(n+1)
...
>>> calc(0)
0
1
...
998
RecursionError: maximum recursion depth exceeded while calling a Python object 分析:
没有结束条件,超过最大递归次数999次后报错
2.每次进入更深一层递归时,问题规模相比上次递归都有所减少
3.递归效率不高,递归次数过多导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构来实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧,由于栈大小不是无限的,所以递归调用的次数过多,会导致栈溢出)
def calc(n):
print(n)
if int(n/2) > 0 : #int()返回整数
return calc(int(n/2))
print("-->",n)
calc(10) 执行结果:
10
5
2
1
--> 1
二、匿名函数
匿名函数就是不需要显式的指定函数
#这段代码
def
calc(n):
return
n
*
*
n
print
(calc(
10
))
#换成匿名函数
calc
=
lambda
n:n
*
*
n
print
(calc(
10
))
10000000000
与其它函数配合使用,
res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
print(i)
输出
1
25
49
16
64
map函数用法:第一个参数接收一个函数名,第二个参数接收一个可迭代对象
ls = [1,2,3]
rs = map(str, ls)
print rs
执行结果:
['', '', '']
---------------------------------
lt = [1, 2, 3, 4, 5, 6]
def add(num):
return num + 1 rs = map(add, lt)
print rs
[2,3,4,5,6,7]
三、高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(x,y,f):
return f(x) + f(y)
res = add(3,-6,abs)
print(res)
9