zoukankan      html  css  js  c++  java
  • Python——递归、二分查找算法

    递归函数

    1. 递归

    (1)什么是递归:在函数中调用自身函数
    (2)最大递归深度:默认997/998——是Python从内存角度出发做的限制

    n = 0
    def story():
        global n
        n+= 1
        print(n)
        story()     #997/998
    story()

    (3)修改最大深度:最好不要改——递归次数太多,则不适合用递归解决问题

    import sys
    sys.setrecursionlimit(2000) #1997/1998

    2. 递归的优点

      会让代码变简单

    3. 递归的缺点

      占用内存

    4. 能看懂递归

    # 算年龄
    
    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): #46
        if 1 == 4:
            return 40
        elif 1>0 and 1<4:
            return age(2) + 2   #44+2 = 46
    
    def age(2): #44
        if 2 == 4:
            return 40
        elif 2>0 and 2<4:
            return age(3) + 2   #42+2 = 44
    
    def age(3): #42
        if 3 == 4:
            return 40
        elif 3>0 and 3<4:
            return age(4) + 2   #40+2 = 42
    
    def age(4): #40
        if 4 == 4:
            return 40
        elif 4>0 and 4<4:
            return age(4+1) + 2
    '''

    5. 应用场景

    6. 初识递归

    7. 算法——二分查找算法(必须有序排列)

    l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,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:
                l[mid_index + 1:]
                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
                # print('找到了', mid_index, aim)
        else:
            return '找不到这个值啊'
    ret1 = find(l,67)  
    ret2 = find(l,64) 
    
    print(ret1) #找到了 18 
    print(ret2) #找不到这个值啊

    8. 三级菜单——递归实现

    长得丑就应该多读书。我爱学习,只爱学习,最爱学习!
  • 相关阅读:
    可实现B站 蒙版弹幕 效果的前端组件 —— Barrage UI
    C# 中的"yield"使用
    不遮挡人物弹幕是怎么实现的——图片蒙版效果-webkit-mask
    使用eslint检查代码质量
    vue 项目中assets 和static的区别
    快速生成html文本文档——typora
    VsCode中好用的git源代码管理插件GitLens
    C# 根据前台校验的值,决定是否执行后台方法
    C# 从字符串中取出英文字母
    C# 科学计数法转换成数字
  • 原文地址:https://www.cnblogs.com/xc-718/p/9751139.html
Copyright © 2011-2022 走看看