一、函数递归
函数递归:一个函数调用自身,则这个函数被称为递归函数,这种现象被称为函数的递归
递归中包含了一种隐式的循环,他会重复执行某段代码,但是这种循环无需用循环语句进行控制
使用递归解决问题的简单思路:
a.写出临界条件
b.需要找到当前的循环和上一次循环之间的关系
c.根据规律实现
二、栈和队列
1.栈
stack
抽象成一个开口向上的容器【羽毛球球筒】
特点:先进后出
#创建一个栈【列表】 my_stack = [] #入栈【向栈中存数据】:append my_stack.append(23) print(my_stack) my_stack.append(30) print(my_stack) my_stack.append(4) print(my_stack) my_stack.append(11) print(my_stack) my_stack.append(20) print(my_stack) #出栈【从栈中取数据】:pop #pop每调用一次,则取出一个数据,先添加进去的最后被取出来【先进后出】 my_stack.pop() print(my_stack) my_stack.pop() print(my_stack) my_stack.pop() print(my_stack) my_stack.pop() print(my_stack) my_stack.pop() print(my_stack)
2.队列
queue
抽象成一个水平放置的水管
特点:先进先出
import collections #创建队列 queue = collections.deque([12,43,8,10]) print(queue) #入队【存数据】,append queue.append(66) print(queue) queue.append(77) print(queue) #deque([12, 43, 8, 10, 66, 77]) #出队【取数据】,popleft queue.popleft() print(queue) queue.popleft() print(queue) queue.popleft() print(queue)
三、目录遍历
1.递归遍历目录
import os #递归 def getAll(path): #列出path下所有的文件夹以及文件 filelist = os.listdir(path) #print(filelist) for filename in filelist: #拼接路径 filepath = os.path.join(path,filename) #print(filepath) if os.path.isdir(filepath): print("目录:",filename) #使用递归 getAll(filepath) else: print("文件:",filename) dir_path = r"C:\Users\Administrator\Desktop\Python" getAll(dir_path)
2.栈模拟递归遍历
深度遍历
import os #栈 def getAll(path): #创建一个空栈 stack = [] #将初始路径添加到栈中 stack.append(path) while len(stack) != 0: #从栈中取出数据 dirpath = stack.pop() #获取当前路径下所有的文件夹以及文件 filelist = os.listdir(dirpath) #遍历列表 for filename in filelist: #拼接路径,二级目录下的文件路径 filepath = os.path.join(dirpath,filename) #判断是否是目录 if os.path.isdir(filepath): #将新的路径添加到栈中 print("目录:",filename) stack.append(filepath) #类似于递归 else: print("普通文件:",filename) dir_path = r"C:\Users\Administrator\Desktop\Python" getAll(dir_path)
3.队列模拟递归遍历
广度遍历
import collections import os def getAll(path): #创建一个空队列 queue = collections.deque() #入队 queue.append(path) while len(queue) != 0: #出队 dirpath = queue.popleft() #获取当前路径下所有的文件夹以及文件 filelist = os.listdir(dirpath) #遍历列表 for filename in filelist: #拼接路径,二级目录下的文件路径 filepath = os.path.join(dirpath,filename) #判断是否是目录 if os.path.isdir(filepath): #将新的路径添加到栈中 print("目录:",filename) queue.append(filepath) #类似于递归 else: print("普通文件:",filename) dir_path = r"C:\Users\Administrator\Desktop\Python" getAll(dir_path)