递归
递归
在函数中调⽤用函数本身. 就是递归
在python中递归的深度最大到998
递归的应用:我们可以使⽤用递归来遍历各种树形结构, 比如我们的⽂件夹系统. 可以使⽤用递归来遍历该
文件夹中的所有⽂文件
递归的缺点:占内存
递归的优点:会让代码变简单
1 def func(n): 2 # 返回n的阶乘 3 if n < 2: 4 return 1 # 函数出口 5 else: 6 return n * func(n - 1) # 自己调用自己,降低运算规模
1 def fibonacci(n): 2 # 斐波那契 3 if n in (1, 2): 4 return 1 5 else: 6 return fibonacci(n-1) + fibonacci(n-2)
1 def find(li, aim, start=0,end=None): 2 """ 3 二分查找,核心思想: 掐头结尾取中间;前提条件: 有序. 4 :param li: 有序列表 5 :param aim: 目标 6 :param start: 开始位置 7 :param end: 结束位置 8 :return: 9 """ 10 end = len(li) -1 if end is None else end 11 mid = (end - start)//2 + start 12 if start <= end: 13 if li[mid] < aim: 14 return find(li, aim, start=mid+1, end=end) 15 elif li[mid] > aim: 16 return find(li, aim, start=start, end=mid-1) 17 else: 18 return mid 19 else: 20 return None
1 # 遍历某文件夹内的所有文件和文件夹 2 import os 3 # 树形结构的遍历 4 def func(file_path, level=0): 5 file_list = [] 6 lst = os.listdir(file_path) # 获取到路径下的所有文件 7 for file in lst: # 文件名 8 full_path = os.path.join(file_path, file) # 获取到文件的全路径 9 if os.path.isdir(full_path): # 判断这个路径是否是一个文件夹 10 file_list.extend(func(full_path, level + 1)) 11 else: 12 file_list.append((file, level)) 13 else: 14 return file_list