python之路--递归, 二分法

1, 递归

   自己调用自己, 递归的入口(参数)  和  出口(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("\t" * n,el) # 显示文件 func("d:/a", 0)

2, 二分法  

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

二分法查找
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)

  


  

猜你喜欢

转载自www.cnblogs.com/attila/p/10113781.html