zoukankan      html  css  js  c++  java
  • day 17递归函数

    #递归函数
    #了解什么是递归:在函数中调用自己
    #最大递归深度默认是997/998---是Python从内存角度出发做的限制
    #能看懂递归
    #能知道递归的应用场景
    #初识递归 ---
    #算法 ---- 二分查找算法
    #三级菜单 ---递归实现

    while True:
    print("从前有座山")
    def story():
    print("从前有坐车")
    story()
    story()

    #RecursionError: maximum recursion depth exceeded while calling a Python object
    #递归错误:超过了递归的最大深度
    import sys
    sys.setrecursionlimit(6789) #设置递归最大层数
    n = 0
    def story():
    global n
    n += 1
    print(n)
    print("从前有坐车")
    story()
    story()

    #如果递归次数太多,就不适合使用递归来解决问题
    #递归的缺点:占内存
    #递归的优点:会让代码变简单


    def age(n):
    if n == 4:
    return 40
    elif n >0 and n <4:
    return age(n+1)+2

    print(age(1))

    #教你看懂递归
    '''def age(1):
    if 1 == 4:
    return 40
    elif 1 >0 and 1 <4:
    return age(1+1)+2
    def age(2):
    if 2 == 4:
    return 40
    elif 2 >0 and 2 <4:
    return age(2+1)+2

    def age(3):
    if 3 == 4:
    return 40
    elif 3 >0 and 3 <4:
    return age(3+1)+2

    def age(4):
    if 4 == 4:
    return 40
    elif 4 >0 and 4 <4:
    return age(4+1)+2
    age(4)=40'''

    #递归:递是指先从上往下;归是指后从下往上

    #什么叫算法
    #计算的方法:人脑复杂,计算机简单

    #查找:找数据
    #排序:
    #最短路径

    #我们现在学习的算法 都是过去式

    #二分查找算法 必须处理有序的列表
    #代码实现
    l = [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 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("找到了",mid_index,l[mid_index])

    find(l,66)


    l = [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 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 '找不到这个值'
    ret = find(l,42)
    print(ret)

    #67 发生两次调用
    #66 发生好几次
    #44 找不到

    #age,二分查找,三级菜单代码看一遍
    #斐波那契数列
    #阶乘
    #考试附加题
    #递归实现

    l = [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 find(l,aim,start=0,end=None):
    end = len(l) if end is None else end
    mid_index = (end-start)//2 + start #(24-13)//2+13=18
    if start <= end:
    if l[mid_index] > aim:
    return find(l,aim,start=start,end=mid_index-1) #41 <66
    elif l[mid_index] < aim:#41 <66
    return find(l, aim, start=mid_index+1, end=end) #start=13,end=
    else:
    return mid_index
    else:
    return '找不到这个值'

    def find(l,aim,start=0,end=None):
    end = len(l) if end is None else end
    mid_index = (end-start)//2 + start #(24-0)//2+0=12
    if start <= end:
    if l[mid_index] > aim:
    return find(l,aim,start=start,end=mid_index-1) #41 <66
    elif l[mid_index] < aim:#41 <66
    return find(l, aim, start=mid_index+1, end=end) #start=13,end=
    else:
    return mid_index
    else:
    return '找不到这个值'
  • 相关阅读:
    LeetCode(65) Valid Number
    LeetCode(57) Insert Interval
    Python 之scrapy框架58同城招聘爬取案例
    Python 之12306网站验证码校验案例
    Python 之selenium+phantomJS斗鱼抓取案例
    Python 之pytesseract模块读取知乎验证码案例
    Python 之糗事百科多线程爬虫案例
    Python 之beautifulSoup4解析库
    Python 之lxml解析库
    把一张的数据添加到另一张中
  • 原文地址:https://www.cnblogs.com/Murraya/p/10902676.html
Copyright © 2011-2022 走看看