函式遞迴,棧,佇列,及三者目錄遍歷

2021-08-28 05:53:55 字數 3368 閱讀 2971

函式遞迴:乙個函式呼叫自身,則這個函式被稱為遞迴函式,這種現象被稱為函式的遞迴

遞迴中包含了一種隱式的迴圈,他會重複執行某段**,但是這種迴圈無需用迴圈語句進行控制

使用遞迴解決問題的簡單思路:

​ a.寫出臨界條件

​ b.需要找到當前的迴圈和上一次迴圈之間的關係

​ c.根據規律實現

1.棧
stack

抽象成乙個開口向上的容器【羽毛球球筒】

特點:先進後出

#建立乙個棧【列表】

my_stack =

23)print

(my_stack)30)

print

(my_stack)4)

print

(my_stack)11)

print

(my_stack)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)66)

print

(queue)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 =

#將初始路徑新增到棧中

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)

#類似於遞迴

else

:print

("普通檔案:"

,filename)

dir_path = r"c:\users\administrator\desktop\python"

getall(dir_path)

3.佇列模擬遞迴遍歷
廣度遍歷

import  collections

import os

defgetall

(path)

:#建立乙個空佇列

queue = collections.deque(

)#入隊

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)

#類似於遞迴

else

:print

("普通檔案:"

,filename)

dir_path = r"c:\users\administrator\desktop\python"

getall(dir_path)

程式設計模式 觀察者模式 事件通知 訊息佇列三者區別

2017.01.11 19 07 09字數 1050閱讀 2016 觀察者模式 事件通知 訊息佇列三者有類似,都有 函式註冊,通知呼叫的設計,容易混淆。觀察者模式 被觀察物件狀態改變,所有觀察它的物件得到通知。也稱訂閱模式,英文observer。被觀察者不依賴觀察者,通過依賴注入達到控制反轉。事件通...

程式設計模式 觀察者模式 事件通知 訊息佇列三者區別

2017.01.11 19 07 09字數 1050閱讀 2016 觀察者模式 事件通知 訊息佇列三者有類似,都有 函式註冊,通知呼叫的設計,容易混淆。觀察者模式 被觀察物件狀態改變,所有觀察它的物件得到通知。也稱訂閱模式,英文observer。被觀察者不依賴觀察者,通過依賴注入達到控制反轉。事件通...

建構函式 例項 原型三者之間的關係

任何函式都具有乙個prototype屬性,該屬性是乙個物件。function f console.log f.prototype object f.prototype.sayhi function 建構函式的prototype物件預設都有乙個constructor屬性,指向prototype物件所在...