python之路——17

王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594

复习

1.迭代器
2.生成器
3.内置函数
1.学习55个
2.带key的,max min filter map sorted
4.匿名函数
lambda

学习内容

1.递归函数
了解递归函数:函数内调用函数自己
缺点:占内存; 优点:简化代码
看懂递归函数:多到即便
应用场景:算法相同,重复
初识算法
计算方法:
查找数据
排序
最短路径
算法——二分法查找
三级菜单——递归实现

代码区

1.初识递归函数

import sys
sys.setrecursionlimit(10000000)
n = 0
def story():
    global n
    n += 1
    print(n)
    story()
story()

2.二分查找法的演变以及python实现

# 二分法
# v1 1.目标存在,2.只找到,索引错误
'''
l1 = [0, 0, 1, 2, 2, 3, 4, 5, 5, 6, 8, 10, 23, 52, 66, 635, 6542]
def find(l, aim):
    mid_index = len(l) // 2
    if l[mid_index] < aim:
        new_l = l[mid_index+1:]
        find(new_l, aim)
    elif l[mid_index] > aim:
        new_l = l[:mid_index]
        find(new_l, aim)
    else:
        print('Get', mid_index)
find(l1, 66)
'''
# v2
'''
l1 = [0, 0, 1, 2, 2, 3, 4, 5, 5, 6, 8, 10, 23, 52, 66, 635, 6542]
def find(l, aim, start=0, end=len(l1)):
    mid_index = (end - start) // 2 + start
    if l[mid_index] < aim:
        find(l, aim, start=mid_index + 1, end=end)
    elif l[mid_index] > aim:
        find(l, aim, start=start, end=mid_index-1)
    else:
        print('get', mid_index, aim)
find(l1, 0)
'''
# 问题:1.找不到的,2.参数end用到了l1 3.函数没有函数值 4.重复
# v3
def find(l, aim, start=0, end=None):
    end = len(l) if end is None else end
    mid_index = (end - start) // 2 + start
    if start <= end:
        if l[mid_index] < aim:
            return find(l, aim, start=mid_index + 1, end=end)
        elif l[mid_index] > aim:
            return find(l, aim, start=start, end=mid_index-1)
        else:
            return mid_index
    else:
        return 'Not in here'


l1 = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]
print(find(l1, 101))

 

posted @ 2019-04-03 20:43  王二被占用  阅读(85)  评论(0)    收藏  举报