python之路 ---递归函数及二分法

递归:在函数调用的过程中,直接或者间接的调用了函数本身

分为两个阶段:1.回溯(一次次的调用下去,必须要有某个值来结束,否则一直调用下去)  2.递推

def f():
    print('你好')
    f()
f()

#这样的递归是没有意义的死循环
#而且,在第一次调用f()执行到f()后,又调用自己(但是第一次的f()并未结束),这样执行f()所申请的内存
#空间会越来越多,python则限制了这种情况的发生,抛出异常:
--->RecursionError: maximum recursion depth exceeded while calling a Python object

递归要注意的点:

      1.递归一定要有一个明确的结束条件

      2.问题的规模应该随着递归的次数减小

      3.python没有尾递归优化机制

 二分法:算法的一种,用于高效率解决一个问题

 例如有一个列表:

L = [1,5,3,7,8,11,77,88,99,33,45,98],输入一个数判断是否存在于这个列表之中(除去in等,单纯的用循环实现):

 L = [1,5,3,7,8,11,77,88,99,33,45,98]
number = int(input('输入一个数字:'))
Tage = True
while Tage:
    for i in L:
        if i == number:
            print(i)
            Tage = False
            break
    else:
        print('不存在!')
        break
#如果列表很大,而且被查找元素在很后面,那么就需要遍历几乎整个列表

使用二分法实现:

L = [1,5,3,7,8,11,77,88,99,33,45,98]
L.sort()
number = int(input('输入要查找的数字:'))
count=0
def func(l,count):
    if len(l) == 0:
        print('没有找到!')
        return
    half = len(l)//2
    if number == l[half]:
        print('找到数字:%s,查找了%d次'%(number,count))
    elif number > l[half]:
        func(l[half+1:],count+1)
    else:
        func(l[:half],count+1)
func(L,count)

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/81357733