一、递归的定义
递归调用是函数嵌套调用的一种特殊形式,在函数调用时,直接或间接的调用了它本身,就是递归调用。
直接调用函数本身
def f1():
print('from f1')
f1()
f1()
间接调用函数本身
def f1():
print('from f1')
f2()
def f2():
print('from f2')
f1()
f2()
递归最大深度的修改
import sys
sys.getrecursionlimit() #默认深度1000左右
sys.getrecursionlimit(2000)
def f1(n):
print('from f1',n)
f1(n+1)
f1(1) #无限制递归调用毫无意义
二、递归调用的两个明确阶段:递推、回溯
回溯就是从外向里一层一层递归调用下去,回溯必须要有一个明确的结束条件
递推就是从里向外一层一层结束递归
def salary(n):
if n == 1:
return 100
return salary(n-1)+300
print(salary(5))
三、二分法
想从一个从小到大排列的列表中找到指定的数字,遍历的效率太低了,用二分法可以极大的缩小问题规模
def search(n,l): print(l) if len(l)==0: print('not exist') return mid_index=len(l)//2 if n > l[mid_index]: l=l[mid_index+1:] search(n,l) elif n < l[mid_index]: l=l[:mid_index] search(n,l) else: print('got it') search(n,l)