• 递归、二分法


    递归

      函数自己调用自己

      最大深度:1000,一般到不了1000就停了

       setrecursionlimit() 方法可以修改深度

      使用递归方法打印1到10

    def fun(x,y):
        if x > y:
            return
        else:
            print(x)
            fun(x+1,y)
    fun(1,10)
    #结果:
    #1
    #2
    #3
    #4
    #5
    #6
    #7
    #8
    #9
    #10
    

      

    二分法

      核心:掐头去尾取中间,一次砍一半
      两种算法:常规循环,递归循环
      常规循环
    def f(arr,t):
        low = 0
        height = len(arr)-1
        while height >= low:
            mid = (low+height) // 2
            if t < arr[mid]:   #low:mid
                height = mid - 1
            elif t > arr[mid]:  # mid:height
                low = mid + 1
            else:
                print("找到了在第%s个位置" % (mid + 1))
                return
        print("没有找到此值")
    
    arr = [1,3,5,13,17,19,20,21,26,30]
    f(arr,21)
    f(arr,13)
    f(arr,38)
    #结果
    #找到了在第8个位置
    #找到了在第4个位置
    #没有找到此值
    

      递归循环

    arr = [1,3,5,13,17,19,20,21,26,30]
    def f(t,low,height):
        if height >= low:
            mid = (low+height) // 2
            if t < arr[mid]:   #low:mid
                height = mid - 1
                return f(t,low,height)
            elif t > arr[mid]:  # mid:height
                low = mid + 1
                return f(t,low,height)
            else:
                print("找到了")
                return mid
        else:
            print("没有找到此值")
            return -1
    ret = f(26,0,len(arr)-1)
    print(ret)
    ret = f(11,0,len(arr)-1)
    print(ret)
    #结果
    #找到了
    #8
    #没有找到此值
    #-1
    

      

  • 相关阅读:
    js可拖拽的div
    hightcharts 3d 堆积图下钻
    绝对炫的3D幻灯片-SLICEBOX
    td在relative模式下,IE9不显示border
    IE9 打不开界面也不报错,只有打开控制台才会显示
    display inline-block 垂直居中
    css实现div的高度填满剩余空间
    g2g c u l8r(训练赛)
    Binarize It(训练赛)
    C. Maximum width(贪心)
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9481950.html
Copyright © 2020-2023  润新知