.user_profile{ display:block}

递归函数和二分查找算法

递归函数

在一个函数里又调用这个函数本身。

递归的最大深度:998

  原因:递归函数如果不受外力的阻止会一直执行下去,每一次函数调用都会产生一个属于他自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,Python为了杜绝此类现象,强制的将递归层数控制在了997。

我们可以通过一些手段修改这个默认值:

import sys
sys.setrecursionlimit(1000)

递归示例:

利用递归循环求100以内的数的和:

def func(n):
    if n == 1:
        return 1
    else:
        return func(n-1)+n

print(func(100))

二分查找算法

代码:

#二分查找
l1 = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

#简单版
def two_find(l,aim):
    mid = (len(l)-1) // 2
    if l:

        # print(mid)
        if aim > l[mid]:
            two_find(l[mid+1:],aim)
        elif aim < l[mid]:
            two_find(l[:mid],aim)
        elif aim == l[mid]:
            print(mid)
    else:
        print('没找到')
two_find(l1,39)

#上面的方法因为索引一直在变,所以查不到确定的索引
#升级版
def two_find(l,aim,start=0,end=None):
    end = len(l) if end == None else end
    mid = (end - start)//2 + start
    if end >= start:
        if aim > l[mid]:
            two_find(l, aim, start=mid + 1, end=end)
        elif aim < l[mid]:
            two_find(l, aim, start=start, end=mid - 1)
        elif aim == l[mid]:
            print('找到了,%s' % mid)
    else:
        print('没找到')
View Code

 

posted @ 2018-06-22 16:15  软萌团子  阅读(112)  评论(0编辑  收藏  举报