您的位置:首页 > 编程语言 > Python开发

Python自学之路:递归、栈和队列遍历目录

2018-09-22 21:59 288 查看

递归调用的概念:一个函数调用了自身,称为递归调用
递归函数的概念:一个能够被自身调用的函数称为递归函数

递归一般执行的是循环逻辑

编写递归函数的方法:
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:
#作为普通文件处理
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: