# 递归函数def func(): print('hello') func()func()# 递归深度,你可以自己调用自己的次数,官方文档中递归最大深度是1000.在这之前就会给你报错
递归很好内存,能用循环就用循环
# 遍历 E:/视频 文件夹,打印出所有的文件和普通文件的文件名import osdef func(filepath,n): # 1.打开这个文件夹 files = os.listdir(filepath) # 2.拿到每一个文件名 for file in files: # 文件名 # 3.获取路径 f_d = os.path.join(filepath,file) # E:/视频/文件名 # 4.判断是否是文件夹 if os.path.isdir(f_d): # 5.如果是文件夹,继续再来一遍 print('\t'*n,file,':') # 打印文件名 func(f_d, n+1) else: print('\t'*n,file)func('E:/视频',0)
使用二分法查找可以提高效率,前提条件:有序序列
核心:掐头去尾取中间,一次砍一半
两种算法:常规循环,递归循环
lst = [22,33,44,55,66,77,88,99,101,238,345,456,678,789]n =79left = 0right = len(lst) - 1while left <= right: # 边界,当右边比左边还小的时候退出循环 mid = (left+right)//2 # 必须是整除,因为索引没有小数 if lst[mid] > n: right = mid -1 if lst[mid] < n: left = mid +1 if lst[mid] == n: print('找到了这个数') breakelse: print('没有这个数')
递归来完成二分法
lst = [22,33,44,55,66,77,88,99,101,238,345,456,678,789]def func(n,left,right): if left <= right: # 边界 mid = (left+right)//2 if n>lst[mid]: left=mid+1 return func(n,left,right) # 递归 if n
# 时间复杂度和空间复杂度降到最低lst1 = [3,4,5]lst2 = [0,0,0,0,0,0]for el in lst1: lst2[el] = 1print(lst2[2] == 1)