遞迴呼叫:乙個函式,呼叫了自身,稱為遞迴呼叫
遞迴函式:乙個會呼叫自身的函式稱為遞迴函式
凡是迴圈能幹的事,均可以用遞迴寫出來
方式:
寫出臨界條件
找這一次和上一次的關係
假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次結果
思路:
臨界條件(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...