標籤:ace rac lse 返回 必須 索引 color recent sdi
一.遞迴
1.遞迴的定義:在函數中調用函數本身,就是遞迴.
def func(): print("我是真的好看!!!") func()func()結果:我是真的好看!!!我是真的好看!!!我是真的好看!!!.......
在python中,遞迴的最大深度是1000,但是不會到1000,在這之前就會給你報錯.
count = 1def func(): global count print("我是真的好看!!!",count) count = count + 1 func()func()結果:.......我是真的好看!!! 997 #到998次就報錯了我是真的好看!!! 998 Traceback (most recent call last): File "E:/wanchengdezuoye/複習/複習.py", line 1354, in <module> func()
遍曆D:/sylar檔案夾,列印出所有的檔案盒普通檔案的檔案名稱
import osdef func(filepath, n): # d:/sylar/ # 1,開啟這個檔案夾 files = os.listdir(filepath) # 2. 拿到每一個檔案名稱 for file in files: # 檔案名稱 # 3. 擷取到路徑 f_d = os.path.join(filepath, file) # d:/sylar/檔案名稱/ # 4. 判斷是否是檔案夾 if os.path.isdir(f_d): # 5. 如果是檔案夾. 繼續再來一遍 print("\t"*n, file,":") # 列印檔案名 func(f_d, n + 1) else: # 不是檔案夾. 普通檔案 遞迴出口,最終在這裡隱含著return print("\t"*n, file)func("d:/sylar",0)
二.二分法
定義:二分尋找,每次能夠排除掉一半的資料,尋找的效率很高,但是必須是有序序列才可以使用二分法尋找.
****要求:尋找的序列必須是有序序列******
li = [22,33,44,55,66,77,88,99,105,126,236,345,564,888]n = 100left = 0 #左邊的邊界,索引為0right = len(li) - 1 #右邊的邊界,列表中資料的數量-1就是888的索引count = 1while left <= right: #當資料n在列表中,左邊小於右邊,否則當交叉的時候,說明不在列表中 mid = (left + right) // 2 #求中間值 if li[mid] > n: #當列表的中間索引的值大於n時,砍掉右面的 right = mid - 1 #中間索引項目左面移動一個,變成右邊的邊界 if li[mid] < n: left = mid + 1 if li[mid] == n: print("在列表中") print(count) break count = count + 1else: print("不在列表中")結果:不在列表中
使用遞迴版二分法
li = [22,33,44,55,66,77,88,99,105,126,236,345,564,888]def func(n,left,right): if left <= right: #邊界 mid = (left + right) // 2 if n > li[mid]: left = mid + 1 return func(n,left,right) #遞迴,遞迴的入口 if n < li[mid]: right = mid - 1 return func(n,left,right) #深坑:函數的傳回值返回給函數,要多吃調用 if n == li[mid]: print("找到了") return mid #返回找到的數在列表中的位置 else: print("沒有") #遞迴的出口 return -1 #沒有找到,返回-1,return什麼都不加,返回Noneret = func(88,0,len(li)-1)print(ret)結果:找到了6
python--函數之遞迴與二分法