zoukankan      html  css  js  c++  java
  • 递归、二分法

    递归

      函数自己调用自己

      最大深度: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
    

      

  • 相关阅读:
    求职简历撰写要点和模板分享
    find命令
    MD5Init-MD5Update-MD5Final
    Linux find命令详解
    Linux进程KILL不掉的原因
    Linux操作系统的内存使用方法详细解析
    Lsof命令详解
    为什么ps中CPU占用率会有超出%100的现象?
    第12课 经典问题解析一
    第11课 新型的类型转换
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9481950.html
Copyright © 2011-2022 走看看