函式遞迴:乙個函式呼叫自身,則這個函式被稱為遞迴函式,這種現象被稱為函式的遞迴1.棧遞迴中包含了一種隱式的迴圈,他會重複執行某段**,但是這種迴圈無需用迴圈語句進行控制
使用遞迴解決問題的簡單思路:
a.寫出臨界條件
b.需要找到當前的迴圈和上一次迴圈之間的關係
c.根據規律實現
stack2.佇列抽象成乙個開口向上的容器【羽毛球球筒】
特點:先進後出
#建立乙個棧【列表】
my_stack =
23)print
(my_stack)30)
(my_stack)4)
(my_stack)11)
(my_stack)20)
(my_stack)
#出棧【從棧中取資料】:pop
#pop每呼叫一次,則取出乙個資料,先新增進去的最後被取出來【先進後出】
my_stack.pop(
(my_stack)
my_stack.pop(
(my_stack)
my_stack.pop(
(my_stack)
my_stack.pop(
(my_stack)
my_stack.pop(
(my_stack)
queue1.遞迴遍歷目錄抽象成乙個水平放置的水管
特點:先進先出
import collections
#建立佇列
queue = collections.deque([12
,43,8
,10])
(queue)66)
(queue)77)
(queue)
#deque([12, 43, 8, 10, 66, 77])
#出隊【取資料】,popleft
queue.popleft(
(queue)
queue.popleft(
(queue)
queue.popleft(
(queue)
2.棧模擬遞迴遍歷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)
("目錄:"
,filename)
#使用遞迴
getall(filepath)
else
("檔案:"
,filename)
dir_path = r"c:\users\administrator\desktop\python"
getall(dir_path)
深度遍歷3.佇列模擬遞迴遍歷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)
:#將新的路徑新增到棧中
("目錄:"
,filename)
#類似於遞迴
else
("普通檔案:"
,filename)
dir_path = r"c:\users\administrator\desktop\python"
getall(dir_path)
廣度遍歷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)
:#將新的路徑新增到棧中
("目錄:"
,filename)
#類似於遞迴
else
("普通檔案:"
,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物件所在...