一. 递归函数
# 递归调用:一个函数,调用了自身 称为递归调用
# 递归函数: 一个会调用自身的函数称为递归函数
# 凡是循环能干的事情 递归都能干
# 方式:
# 写出临界条件
# 我这一次和上一次的关系
# 假设当前函数已经能用 调用自身计算上一次结果 在求出本次的结果
# 输入一个数(大于等于1) 求 1+2+3.......的和
def sum1(n):
sum=0
for x in range(1,n+1):
sum+=x
return sum
res=sum1(5)
print(res)
def sum2(n):
if n==1:
return 1
else:
return n+sum2(n-1)
res=sum2(3)
print(res) #3
# 5+sum2(4)
# 5+4+sum2(3)
# 5+4+3+sum2(2)
# 5+4+3++2sum2(1)
# 5+4+3+2+1
# 模拟栈数据结构
# 压栈向栈里导入数据
a1=[]
a1.append("A")
print(a1) #['A']
a1.append("B")
print(a1) #['A', 'B']
a1.append("C")
print(a1) #['A', 'B', 'C']
# 出栈
b1=a1.pop()
print(b1) # C
print(a1) # ['A', 'B']
b2=a1.pop()
print(b2) # B
print(a1) # ['A']
b3=a1.pop()
print(b3) # A
print(a1) # []
import collections
# 队列是先进先出
# 创建一个队列
import collections
# 队列是先进先出
# 创建一个队列
queue=collections.deque()
print(queue) #deque([])
# 进队
queue.append("1")
print(queue) #deque(['1'])
queue.append("2")
print(queue) #deque(['1', '2'])
queue.append("3")
print(queue) #deque(['1', '2', '3'])
# 出队取数据
a1=queue.popleft()
print(a1) #1
print(queue) #deque(['2', '3'])
a2=queue.popleft()
print(a2) # 2
print(queue) #deque(['3'])
a3=queue.popleft()
print(a3) #3
print(queue) # deque([])
# 深度遍历 利用 进栈 和 出栈 的知识1
import os
def getAllDir(path):
# 得到目录下的所有目录
filesList=os.listdir(path)
# 处理每一个文件、
for fileName in filesList:
# 判断路径 是否觉对路径
fileAbsPath=os.path.join(path,fileName)
if os.path.isdir(fileAbsPath):
print("目录"+fileName)
getAllDir(fileAbsPath)
else:
print("普通文件"+fileName)
getAllDir(r"E:\Studypython\py2\dir")
# 深度遍历 利用 进栈 和 出栈 的知识2
import os
def getAllDirDE(path):
stack=[]
stack.append(path)
# print(stack) # ['E:\\Studypython\\py2\\dir']
处理栈 当前栈为空的时候结束循环
while len(stack)!=0:
从栈里取出数据
dirPath=stack.pop()
# print(dirPath) # E:\Studypython\py2\dir
目录下所有文件
filesList=os.listdir(dirPath)
#print(filesList) # ['.project', '2', 'app.js', 'controller', 'models', 'node_modules', 'package.json', 'public', 'uploads', 'views']
处理每一个文件 如果是普通文件则打印 如果是目录则将改目录的地址压栈
for fileName in filesList:
# print(fileName) # .project 2 app.js controller models node_modules package.json public uploads views
fileAbsPath=os.path.join(dirPath,fileName)
#print(fileAbsPath)
#E:\Studypython\py2\dir\.project
# E:\Studypython\py2\dir\2
# E:\Studypython\py2\dir\app.js
# E:\Studypython\py2\dir\controller
# E:\Studypython\py2\dir\models
# E:\Studypython\py2\dir\node_modules
# E:\Studypython\py2\dir\package.json
# E:\Studypython\py2\dir\public
# E:\Studypython\py2\dir\uploads
# E:\Studypython\py2\dir\views
#
if os.path.isdir(fileAbsPath):
是目录就压栈
print("目录---"+fileName)
# 目录---2
# 目录---controller
# 目录---models
# 目录---node_modules
# 目录---public
# 目录---uploads
# 目录---views
stack.append(fileAbsPath)
#print(stack)
#['E:\\Studypython\\py2\\dir\\2']
# ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller']
# ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models']
# ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models', 'E:\\Studypython\\py2\\dir\\node_modules']
# ['E:\\Studypython\\py2\\dir\\2', 'E:\\Studypython\\py2\\dir\\controller', 'E:\\Studypython\\py2\\dir\\models', 'E:\\Studypython\\py2\\dir\\node_modules', 'E:\\Studypython\\py2\\dir\\public']
else:
打印普通文件
print("普通文件--"+fileName)
# 普通文件--.project
# 普通文件--app.js
# 普通文件--package.json
# 普通文件--album.ejs
# 普通文件--err.ejs
# 普通文件--index.ejs
# 普通文件--1 - 副本.jpg
# 普通文件--1.jpg
# 普通文件--2 - 副本.jpg
# 普通文件--2.jpg
# 普通文件--3 - 副本.jpg
# 普通文件--3.jpg
# 普通文件--4 - 副本.jpg
# 普通文件--4.jpg
# 普通文件--5 - 副本.jpg
# 普通文件--5.jpg
# 普通文件--bootstrap.js
# 普通文件--bootstrap.min.js
# 普通文件--jquery-1.12.4.js
# 普通文件--npm.js
# 普通文件--1.jpg
# 普通文件--2.jpg
# 普通文件--4.png
getAllDirDE(r"E:\Studypython\py2\dir")
# 队列就是先进去的 就先走 相当于排队
import collections
import os
# 队列是先进先出
def aa(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)
#print(fileAbsPath)
# E:\Studypython\py2\dir\.project
# E:\Studypython\py2\dir\2
# E:\Studypython\py2\dir\app.js
# E:\Studypython\py2\dir\controller
# E:\Studypython\py2\dir\models
# E:\Studypython\py2\dir\node_modules
# E:\Studypython\py2\dir\package.json
# E:\Studypython\py2\dir\public
# E:\Studypython\py2\dir\uploads
# E:\Studypython\py2\dir\views
# 判断是否为目录
if os.path.isdir(fileAbsPath):
print("目录-----"+fileName)
#目录-----controller
# 目录-----models
# 目录-----node_modules
queue.append(fileAbsPath)
else:
print("普通文件-----"+fileName)
# 普通文件-----index.js
# 普通文件-----callsite-tostring.js
# 普通文件-----event-listener-count.js
# 普通文件-----index.js
aa(r"E:\Studypython\py2\dir")
来源:https://www.cnblogs.com/sup-123/p/10155764.html