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:
#作為普通檔案處理
相關文章
- Python零基礎學習筆記(三十八)——遞迴方法、棧、佇列模擬遍歷目錄Python筆記遞迴佇列
- Python基礎之棧與佇列及遞迴目錄Python佇列遞迴
- 刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列遞迴佇列
- 非遞迴實現先序遍歷和中序遍歷遞迴
- [work] python巢狀字典的遞迴遍歷Python巢狀遞迴
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- js遞迴遍歷講解JS遞迴
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 二叉樹建立後,如何使用遞迴和棧遍歷二叉樹?二叉樹遞迴
- 遞迴遍歷當前目錄下所有的git倉庫,執行git pull操作遞迴Git
- 遞迴遍歷網站所有 url遞迴網站
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 目錄遍歷-基於Pikachu的學習
- 棧和佇列佇列
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 佇列 和 迴圈佇列佇列
- 什麼是目錄遍歷?
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 9. 題目:對佇列實現棧&用棧實現佇列佇列
- 遞迴遍歷物件獲取value值遞迴物件
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- 迭代及用遞迴遍歷File檔案遞迴
- Chapter 2 棧和佇列APT佇列
- 程式碼隨想錄演算法訓練營,9月9日 | 二叉樹遞迴遍歷,迭代遍歷,層序遍歷演算法二叉樹遞迴
- 遍歷目錄下的所有檔案
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- Day14 | 二叉樹遞迴遍歷二叉樹遞迴
- C++單連結串列遞迴遍歷操作C++遞迴
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- python 元組,列表 迴圈遍歷Python
- 實訓:使用while與自增運算子迴圈遍歷陣列While陣列
- 10月15日 棧和佇列實現迴文數字佇列