递归,二分法
1 #用递归法创建一个输出文件目录的函数 2 import os 3 def func(filepath,n):#参数 (文件路径,文件目录起始空格数) 4 files=os.listdir(filepath)#打开文件 5 for file in files:#遍历一遍文件内的每个文件和文件夹 6 f_d=os.path.join(filepath,file)#得到每个文件和文件夹的路径 7 if os.path.isdir(f_d):#判断是否是文件夹 8 print('\t'*n,file,':')#打印文件夹的格式 9 func(f_d,n+1)#再次循环运行函数,打开新的文件夹 10 else: 11 print('\t'*n,file)#打印文件的格式
递归深度在1000以内,快到1000就会停止.
二分法:
1.只能处理有序数据
2.数据时是通过索引处理的
3通过第一个索引位置和最后一位索引位置找到中间索引,然后判断中间索引的大小,大往右移一位做第一个索引,小往左移一位做最后一位索引,不断循环直到第一个索引的值大于最后一位索引的值.
1 lst=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32] 2 def func(n,left,right):#参数(要找的值,数据内的第一个索引,最后一个索引 3 if left<=right:#二分法分到最后,最后一个索引和第一个索引会调换,因此只要判断大小,就可以确定是否运行到最后 4 mid=(left+right)//2#找到中间的索引,如果用除法会得到小数点,因此在这里用整除 5 if n>lst[mid]:#如果要找的值大于中间索引对应的值,那么我们要找的值在后半部分,去掉前半部分 6 left=mid+1#那么中间的索引往后移一位,并替换成第一位的索引 7 return func(n,left,right)#重新调用函数 8 elif n<lst[mid]:#如果值小,那么在前半部分,去掉后半部分 9 right=mid-1#那么中间的索引往前移一位,并替换最高一位的索引 10 return func(n,left,right)#重新调用函数 11 elif n==lst[mid]:#如果中间的索引对应的值和我们要找的值相等,那么我们就得到了找的值的位置了 12 print('这个数在%s'% mid) 13 return mid 14 else: 15 print('没有这个数') 16 return -1#返回-1可以为后来者提供方便