递归,二分法

递归:自己调用自己

1.用递归查找文件:

import  os
def func(filepath,n):
    files = os.listdir(filepath) #这是os模块自带的方法,返回文件夹下的所有文件
    for file in files:
        f_d = os.path.join(filepath,file)
        if os.path.isdir(f_d):
            print('\t'*n,file)
            func(f_d,n+1)
        else:
            print('\t'*n,file)
func('D:\优酷,网易云',0)

while循环二分法实现:

l = [1,2,3,4,5,6,7,8,9,10]
left = 0
right = len(l)-1
n=8
while left <= right:
    mid = (left+right)//2
    if l[mid] < n:
        left +=1
    if l[mid] >n:
        right +=1
    if l[mid] == n:
        print('找到了')
        print(mid)
        break
else:
    print('没找到')

递归实现二分法:

l = [1,2,3,4,5,6,7,8,9,10]

left = 0
right = len(l)-1
def func(n,left,right):
    mid = (left + right) //2
    if left <= right:
        if l[mid] >n:
            right = mid -1
            return func(n,left,right)#这里一定要renturn,返回返回值
        if l[mid] < n:
            left = mid +1
            return func(n,left,right)
        if l[mid] == n:
            print('找到了')
            return mid

    else:
        print('没找到')
        return -1
ret  = func(12,left,right)
print(ret)

查找最快实现方法:

l = [1,2,3,4,5,6,7,8,9,10]
lst =[]
for i in l:
    lst.append(1)
print(lst)
n = 10

if lst[n-1] == 1:
    print('在里边')
else:
    print('不在')

 

posted @ 2021-01-16 12:12  苦行僧冬*婷  阅读(130)  评论(0)    收藏  举报