码迷,mamicode.com
首页 > 其他好文 > 详细

递归,二分法

时间:2018-08-15 17:43:58      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:返回   索引   文件目录   pre   listdir   递归   files   大小   格式   

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

 

递归,二分法

标签:返回   索引   文件目录   pre   listdir   递归   files   大小   格式   

原文地址:https://www.cnblogs.com/leo-tail-x/p/9482681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!