一个函数调用自身,称为递归调用。
方式:
1.写出临界条件
2.找这一次和上一次的关系
3.假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果
例:
输入一个数(大于等于1),求1+2+3+…+n的和
def sum2(n):
if n==1:
return 1
else:
return n+sum2(n-1)
栈:
先进后出
#模拟栈结构 stack = []
#压栈 stack.append()
#出栈 stack.pop()
队列:
先进先出
#模拟队列结构
import collections
q = collections.deque()
#进队
q.append()
#出队
q.popleft()
递归遍历目录:
import os #导入操作系统相关模块
def getAllDir(path,p=""):
filesList = os.listdir(path) #读取该目录内文件
p+=" " #字符串p控制目录层级,走一层加两个空格
for fileName in filesList:
fileAbsPath = os.path.join(path,fileName)
if os.path.isdir(fileAbsPath): #判断是否为目录
print(p+fileName)
getAllDir(fileAbsPath,p) #对是目录的文件进行递归处理
else:
print(p+fileName)
栈遍历目录(深度遍历):
import os
def getAllDirDE(path):
stack=[]
stack.append(path)
#栈空为循环结束条件
while len(stack)!=0:
dirpath = stack.pop()
filesList = os.listdir(dirpath) #取出 要处理file的每一个子文件
for fileName in filesList:
fileAbsPath = os.path.join(dirpath,fileName)
if os.path.isdir(fileAbsPath): #是目录就压栈
print("目录"+fileName)
stack.append(fileAbsPath)
else:
print(“文件”+fileName)
队列遍历目录(广度遍历):
import collections
import os
def getAllDirQU(path):
queue = collections.deque()
queue.append(path)
while len(queue)!=0:
dirpath = queue.popleft()
fileslist = os.listdir(dirpath)
for fileName in fileslist:
fileAbsPath = os.path.join(dirpath,fileName)
if os.path.isdir(fileAbsPath):
print(fileName)
queue.append(fileAbsPath)
else:
print(fileName)