一. 递归函数
# 递归调用:一个函数,调用了自身 称为递归调用
# 递归函数: 一个会调用自身的函数称为递归函数
# 凡是循环能干的事情 递归都能干
# 方式:
# 写出临界条件
# 我这一次和上一次的关系
# 假设当前函数已经能用 调用自身计算上一次结果 在求出本次的结果
# 输入一个数(大于等于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