七、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
posted @ 2018-01-04 22:07  丢失固执  阅读(162)  评论(0编辑  收藏  举报