定義:1、在乙個函式裡再呼叫這個函式本身、
2、有明確的結束條件
遞迴函式的最大深度
1、理論上,官方文件說明是1000
2、實際測試是998
檢測方法:
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
3、最大深度可以修改,修改命令:(不建議修改)
import sys
sys.setrecursionlimit(10000000) # 修改遞迴的最大層次
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
遞迴的應用:
#遞迴遍歷目錄下所有檔案
import os
def read(filepath, n):
files = os.listdir(filepath) # 獲取到當前資料夾中的所有檔案
for fi in files: # 遍歷資料夾中的檔案, 這裡獲取的只是本層檔名
fi_d = os.path.join(filepath,fi) # 加如資料夾 獲取到資料夾+檔案
if os.path.isdir(fi_d): # 如果該路徑下的檔案是資料夾
print("\t"*n, fi)
read(fi_d, n+1) # 繼續進行相同的操作
else:
print("\t"*n, fi) # 遞迴出來. 最終在這裡隱含著return
read('../python_s14/', 0)
# 二分查詢
def search(num,l,start=none,end=none):
start = start if start else 0
end = end if end else len(l) - 1
mid = (end - start)//2 + start
if start > end:
return none
elif l[mid] > num :
return search(num,l,start,mid-1)
elif l[mid] < num:
return search(num,l,mid+1,end)
elif l[mid] == num:
return mid
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
print(search(66,l))
#遞迴實現**選單
def threelm(dic):
while true:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key
elif key in dic.keys() and dic[key]:
ret = threelm(dic[key])
if ret == 'q': return 'q'
threelm(menu)
3 函式 遞迴 模組
將網域名稱和ip分為三段,網域名稱前 本網域名稱 網域名稱後,寫到新配置檔案中,當檢測新配置檔案沒錯誤時,備份配置檔案,將新配置檔案重新命名為配置檔名,重啟伺服器 import shutil def fetch domain find domain backend s domain is find ...
Python3 遞迴函式
1.必須有乙個明確的結束條件 2.每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少 3.遞迴效率不高,遞迴層次過多會導致棧溢位 在計算機中,函式呼叫是通過棧 stack 這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,...
Python3 遞迴函式
在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。def calc n print n if int n 2 0 return n return calc int n 2 calc 10 輸出 105 21遞迴特性 1.必須有乙個明確的結束條件,最多遞迴999次 2...