一. 递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数。
|
|
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
堆栈扫盲http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html
举例:递归函数实际应用案例,二分查找
data
=
[
1
,
3
,
6
,
7
,
9
,
12
,
14
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
30
,
32
,
33
,
35
]
def
binary_search(dataset,find_num):
(dataset)
if
len
(dataset) >
1
:
mid
=
int
(
len
(dataset)
/
2
)
if
dataset[mid]
=
=
find_num:
#find it
(
"找到数字"
,dataset[mid])
elif
dataset[mid] > find_num :
# 找的数在mid左面
(
"\033[31;1m找的数在mid[%s]左面\033[0m"
%
dataset[mid])
return
binary_search(dataset[
0
:mid], find_num)
else
:
# 找的数在mid右面
(
"\033[32;1m找的数在mid[%s]右面\033[0m"
%
dataset[mid])
return
binary_search(dataset[mid
+
1
:],find_num)
else
:
if
dataset[
0
]
=
=
find_num:
#find it
(
"找到数字啦"
,dataset[
0
])
else
:
(
"没的分了,要找的数字[%s]不在列表里"
%
find_num)
binary_search(data,
66
)