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
    

      

  • 相关阅读:
    Cookies的实际存储位置
    搭建Git本地服务器
    在Tomcat中部署war
    Server.xml配置解析
    Tomcat配置详解,配置文件server.xml详解
    将centos7打造成桌面系统
    英语词汇大全
    商场/超市常见英语标识
    商务英语词汇大全
    常用繁体字大全
  • 原文地址:https://www.cnblogs.com/JinMuBaoBao/p/9481950.html
Copyright © 2011-2022 走看看