递归,二分法

 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可以为后来者提供方便

 

posted @ 2018-08-15 17:17  狮子座的尾巴  阅读(158)  评论(0编辑  收藏  举报