Python自學之路:遞迴、棧和佇列遍歷目錄
遞迴呼叫的概念:一個函式呼叫了自身,稱為遞迴呼叫 遞迴函式的概念:一個能夠被自身呼叫的函式稱為遞迴函式
遞迴一般執行的是迴圈邏輯
編寫遞迴函式的方法: 1、找出臨界條件,比如最小值,最大值等等 2、找出這一次和上一次的關係 3、假設當前函式已經能用,呼叫自身計算上一次結果,再求出本次的結果
一個簡單的遞迴函式: def sum(n): if n==1:#這個就是臨街條件 return 1 else: return n + sum(n-1) #這一次和上一次的關係
棧:先進後出的方式存取資料 佇列:先進先出的方式存取資料 用列表模仿棧: #定義一個列表 stack =[]
#壓棧 stack.append(‘A’) #出棧 data = stack.pop()
#佇列操作 import collections
#建立一個佇列 queue = collections. deque() #進隊 queue.append(‘A’) #出隊 data = queue.popleft()
#遞迴的方式遍歷目錄 import os def getAllDir(path): #獲取當前目錄下的所有檔案 filesList = os.listdir(path) #處理每一個檔案 for fileName in filesList: #判斷是否是路徑(絕對路徑) absPath = os.path.join(path, fileName) if os.path.isdir(absPath): #是路徑就呼叫自身 getAllDir(absPath) else: #作為普通檔案處理
#用棧的方式遍歷目錄(深度遍歷) import os def getAllDirDE(path): #定義一個空棧 stack = [] #把當前目錄壓棧 stack.append(path) #處理棧,當棧為空就結束程式 while len(stack) !=0: #出棧 dirPath = stack.pop() #目錄下所有檔案 fileList = os.listdir(dirPath) #處理每一個檔案 for fileName in fileList: #獲取此檔案的絕對路徑 fileAbsPath = os.path.join(dirPath, fileName) #判斷是否為目錄 if os.path.isdir(fileAbsPath): #壓棧 stack.append(fileAbsPath) else: #作為普通檔案處理
#佇列方式遍歷目錄(廣度遍歷) import os import collections
def getAllDirQU(path): #建立一個佇列 queue = collections.deque() #進隊 queue.append(path)
while len(queue) !=0:
#出隊
dirPath = queue.popleft()
#目錄下所有檔案
fileList = os.listdir(dirPath)
#處理每一個檔案
for fileName in fileList:
#獲取絕對路徑
fileAbsPath = os.path.join(dirPath, fileName)
#判斷是否是目錄
if os.path.isdir(fileAbsPath):
queue.append(fileAbsPath)
else:
#作為普通檔案處理