Prthon3 遞迴函式

2021-09-09 06:39:43 字數 1713 閱讀 9034

定義: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...