1. 程式人生 > >Python自學之路:遞迴、棧和佇列遍歷目錄

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:
			#作為普通檔案處理