Python-day20 递归

什么是递归?

函数自己调用自己,类似于死循环

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)

明天推导式表达器,以后不写太多全靠水

发布了130 篇原创文章 · 获赞 11 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章