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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章