1. 递归
自己调自己
难点:不好想,需要找规律不好读
2. 二分法
头,结尾,取中间, 不停的改变左和右,间接改变中间,查询效率非常高
1. 递归(方法一:)
# 递归的用处: 遍历树形结构(拿一个数据进行遍历,得到两个结果在进行遍历,得到四个结果...,这是树形结构) import os filePath = "d:/untitled" it = os.listdir(filePath) # 查看文件夹中的文件, # print(it) # 以列表的形式打印 print("__iter__" in dir(it)) # 判断是否可迭代,里面的列表可以迭代, 返回True for i in it: print(i) # 直接打印,不是以列表的形式 import os filePath = "d:/untitled" def read(filePath,n): it = os.listdir(filePath) # listdir 查看(打开)文件夹中的文件 # print("__iter__" in dir(it)) # 可迭代对象 # print("__next__" in dir(it)) 不是迭代器 for i in it: if os.path.isdir(os.path.join(filePath,i)): # isdir 判断是否是文件夹 os.path.join 固定写法(拼接) print("\t" * n, i) # 打印文件夹, # print(i) # 再次调用本函数 # read(i) read(os.path.join(filePath,i),n+1) # 拿到路径(用原先的路径+进去的一层文件加,组成一个新的路径) else: # 普通文件, 不是文件夹了 print("\t"*n,i) # 递归的出口,递归了一次,n是判断递归的次数 read(filePath,0) # 解释: # 就是把一个文件夹打开,判断是否是文件,如果出现了另一个文件夹,然后进行拼接,出现新的路径 # 如果再打开还是文件夹的话,继续拼接,直到出现文件为止,打印出内容.
2. 递归(方法二:)
import os filePath = "d:/untitled" def read(filePath, n): # n 递归深度 it = os.listdir(filePath) # listdir 查看(打开)文件夹中的文件 # print("__iter__" in dir(it)) # 可迭代对象 for i in it: # 打开一层 # 拿到路径 fp = os.path.join(filePath, i) # 拼接 if os.path.isdir(fp): # 判断是否是文件夹 print("\t"*n, i) read(fp,n+1) # 又是文件夹了,继续读取内部的内容,递归入口 else: print("\t"*n,i) # 递归出口 read(filePath, 1)遍历树形结构
3. 二分查找法
# 方法一: (普通方法) lst= [11,22,33,44,55,66,77,88,99] # // 地板除 n = 66 left = 0 right = len(lst) - 1 # 长度 - 1 = 索引 count = 1 while left <= right: middle = (left + right) // 2 if n > lst[middle]: left = middle + 1 elif n < lst[middle]: right = middle - 1 else: print(count) print("存在") print(middle) # middle 是中间索引 break count = count + 1 else: print("不存在") # 方法二: (递归 二分法) lst= [11,22,33,44,55,66,77,88,99] def binary_search(left, right, n): middle = (left + right)//2 if left > right: print("没有") return -1 # 没有会返回-1 if n > lst[middle]: left = middle + 1 elif n < lst[middle]: right = middle - 1 else: return middle # 有的话,返回输入值的索引 return binary_search(left,right,n) # n表示你输入的值,判断的值的索引 print(binary_search(0,len(lst)-1,65))View Code