zoukankan      html  css  js  c++  java
  • 递归,二分法

     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('	'*n,file,':')#打印文件夹的格式
     9             func(f_d,n+1)#再次循环运行函数,打开新的文件夹
    10         else:
    11             print('	'*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可以为后来者提供方便
  • 相关阅读:
    Android 中Service生命周期
    Android开发中退出程序几种方法
    FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法
    【Java并发编程实战】-----synchronized
    The specified child already has a parent错误
    使用Ant打包工具 基本介绍
    what's WSDL
    XFire WebService demo
    jws webservice code
    axis、xfire、CXF 、JWS
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/9482681.html
Copyright © 2011-2022 走看看