python中的遞迴,棧與佇列和目錄遍歷

2021-09-18 07:12:00 字數 2839 閱讀 7344

遞迴呼叫:乙個函式,呼叫了自身,稱為遞迴呼叫

遞迴函式:乙個會呼叫自身的函式稱為遞迴函式

凡是迴圈能幹的事,均可以用遞迴寫出來

方式:

寫出臨界條件

找這一次和上一次的關係

假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次結果

思路:

臨界條件(1)

找上一次和本次的關係(相加的關係)

sum(4)+5 = sum(5),所以return n + sum(n - 1)

#輸入乙個數(大於等於1),求1+2+3……n的和

def sum(n):

if n == 1:

return 1

else:

return n + sum(n - 1)

s = sum(3)

print(s)

棧:先進後出

#模擬棧結構

stack =

#壓棧(向棧裡存資料)

print(stack)

print(stack)

#出棧(在棧裡取資料)

res = stack.pop()

print("res = ", res)

print(stack)

佇列:先進先出

import collections
#建立乙個佇列

queue = collections.deque()

print(queue)

#進隊(存資料)

print(queue)

print(queue)

#出隊(取資料)

res1 = queue.popleft()

print("res1 =", res1)

print(queue)

res2 = queue.popleft()

print("res2 =", res2)

print(queue)

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)

#if os.path.isdir(os.path.join(path, filename)):

#print("目錄:", filename)

#else:

#print("普通檔案", filename)

getalldir("d:\雜物")

import os

#深度遍歷

def getalldirde(path):

stack = #定義棧

#處理棧,當棧為空的時候結束迴圈

while len(stack) != 0:

#從棧裡取出資料

dirpath = stack.pop()

#以列表的形式把指定目錄下的所有的檔案存入fileslist

fileslist = os.listdir(dirpath)

#處理每乙個檔案,如果是普通檔案則列印出來,

#如果是目錄,則將該目錄的位址壓棧

for filename in fileslist:

fileabspath = os.path.join(dirpath,filename)

if os.path.isdir(fileabspath):

#是目錄就壓棧

print("目錄:" + filename)

else:

#列印普通檔案

print("普通:"+filename)

getalldirde(r"d:\植物")

3.3 佇列模擬遞迴遍歷目錄(廣度遍歷)

import os

import collections

def getalldirdu(path):

queue = collections.deque()

#進隊while len(queue) != 0:

#出隊資料

dirpath = queue.popleft()

#找出所有檔案

fileslist = os.listdir(dirpath)

for filename in fileslist:

fileabspath = os.path.join(dirpath, filename)

if os.path.isdir(fileabspath):

print("目錄:"+filename)

else:

print("普通檔案:"+filename)

getalldirdu(r"d:\植物")

python 遞迴(附利用棧和佇列模擬遞迴)

凡是迴圈能幹的事,遞迴都能幹12 34方法 1 寫出臨界條件 2 找這一次和上一次的關係 3 假設當前函式已經能用,呼叫自身計算上一次的結果再求出本次的結果 下面我們通過兩段 簡單看一下遞迴和非遞迴的區別 輸入乙個大於等於1的數,求1到n的和!1 普通函式方法 2 3 def hanshu n 4 ...

遞迴 棧和佇列遍歷

import os def getalldir path,sp fileslist os.listdir path 得到當前目錄下所有的檔案 sp for filename in fileslist 處理每乙個檔案 fileabspath os.path.join path,filename if ...

python學習筆記16(遞迴 棧和佇列)

遞迴呼叫 乙個函式,呼叫了自身,稱為遞迴呼叫 遞迴函式 乙個會呼叫自身的函式稱為遞迴函式 特點 凡是迴圈能幹的事,遞迴都能幹 過程 1 寫出臨界條件 2 找這一次和上一次的關係 3 假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次的結果 輸入乙個數 大於等於1 求1 2 3 n的和 用fo...