七、Python 之递归与二分法
1. 递归
递归调用:在调用一个函数的过程中,直接或者间接又调用该函数本身
递归的2个阶段:1.递推、2.回溯
import sys
print(sys.getrecursionlimit()) #1000 默认次数,若是死循环,最多打印1000次
sys.setrecursionlimit(2000) #修改系统默认设置
print(sys.getrecursionlimit()) #2000
#example1
def age(n):
if n==1:
return 18
return age(n-1)+2
res=age(4)
print(res) #24
#example2
l=[1,[2,[3,[4,[5,[6,[7]]]]]]]
def func(l):
for item in l:
if type(item) is list:
func(item)
else:
print(item)
func(l)
2. 二分法
从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模
l=[1,2,10,30,33,99,101,200,301,402] #从小到大排列的数字列表
def search(l,item):
if len(l) == 0:
print ('%s is not exists' %(item))
return
print(l)
mid_index = len(l)//2
if l[mid_index] > item:
search(l[0:mid_index],item)
elif l[mid_index] < item:
search(l[mid_index:],item)
else:
print('find it')
search(l,101)
#result
[1, 2, 10, 30, 33, 99, 101, 200, 301, 402]
[99, 101, 200, 301, 402]
[99, 101]
find it