zoukankan      html  css  js  c++  java
  • python之路--递归, 二分法

    一 . 递归

       自己调用自己, 递归的入口(参数)  和  出口(return),  树形结构的遍历.

    def func():
        print("我是递归")
        func()
    func()   
    
    树形结构的遍历
    import os
    
    def func(lujing, n): # "d:/a/"
        lst = os.listdir(lujing) # 打开文件夹. 列出该文件夹内的所有文件名
        for el in lst: # el是文件的名字.  b, c
            # 还原文件路径
            path = os.path.join(lujing, el) # "d:/a/b"
            if os.path.isdir(path): # 判断路径是否是文件夹
                print("..." * n,el) # 显示文件夹的名字
                func(path, n + 1)  # 在来一次  ################
            else:
                print("	" * n,el) # 显示文件
    func("d:/a", 0)

    二 . 二分法

      掐头结尾取中间, 查找效率非常的高

    二分法查找
    lst = [1,3,5,7,12,36,68,79]
    n = int(input("请输入一个数"))
    left = 0
    right = len(lst) - 1
    while left <= right:
        mid = (left + right)//2
        if n > lst[mid]:
            left = mid + 1
        elif n < lst[mid]:
            right = mid - 1
        else:
            print("存在")
            break
    else:
        print("不存在")

      用递归方法查找(第一种)

    def func(n, lst):
        left = 0
        right = len(lst) - 1
        if lst != []:
            mid = (left + right)//2
            if n > lst[mid]:
                func(n, lst[mid+1:]) # 改变列表
            elif n < lst[mid]:
                func(n, lst[:mid])
            else:
                print("找到了")
                return
        else:
            print("没找到")
            return
    n = int(input("请输入你要查找的数:"))
    func(n, [1,3,5,7,12,36,68,79]) 

      用递归方法查找(第二种)

    def func(n, lst, left, right): # 递归找到什么是可以变的. 什么是不可以变的
        if left <= right:
            mid = (left + right) // 2
            if n > lst[mid]:
                left = mid + 1
                return func(n, lst, left, right)
            elif n < lst[mid]:
                right = mid - 1
                return func(n, lst, left, right) # 递归如果有返回值. 所有调用递归的地方必须写return
            else:
                print("找到了")
                return mid  # 难点
        else:
            print("找不到")
            return -1
    n = int(input("请输入你要查找的数:"))
    lst = [1,3,55,98,37,41,2,5,1,4]
    ret = func(n, lst, 0, len(lst)-1) 
    print(ret)

      


      

  • 相关阅读:
    BZOJ 1051: [HAOI2006]受欢迎的牛
    BZOJ 3668: [Noi2014]起床困难综合症
    BZOJ 4395: [Usaco2015 dec]Switching on the Lights
    BZOJ 2763: [JLOI2011]飞行路线
    Bzoj 3196 Tyvj 1730 二逼平衡树
    BZOJ 2407: 探险/4398: 福慧双修
    BZOJ 3040: 最短路(road)
    BZOJ 2809: [Apio2012]dispatching
    BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚
    BZOJ 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/attila/p/10113781.html
Copyright © 2011-2022 走看看