python基礎學習之遞歸函數(shù)知識總結
一、遞歸函數(shù)使用注意點
遞歸函數(shù)一定要編寫終止條件,否則將產(chǎn)生無限遞歸。(死循環(huán))
二、遞歸的效率問題
- 遞歸效率不高,遞歸層次過多會導致棧溢出。
- Python中不推薦使用遞歸。
三、遞歸函數(shù)引入
"""
使用代碼循環(huán)輸出故事:從前有座山,山里有座廟...
"""
# ------------while循環(huán) (暫時忽略死循環(huán))---------------
while True:
print("從前有座山,山里有座廟...")
# ---------------通過定義一個方法, 在while循環(huán)里面調(diào)用實現(xiàn)( 暫時忽略死循環(huán))---------------
def func_story():
print("從前有座山,山里有座廟...")
while True:
func_story()
# ---------------使用遞歸的方法實現(xiàn)循環(huán)---------------
def story():
print("從前有座山,山里有座廟...")
story()
story()
# 報錯:RecursionError: maximum recursion depth exceeded while calling a Python object
四、遞歸的深度
這里就引申到一個遞歸的最大深度。
import sys
# 獲取最大遞歸深度
res = sys.getrecursionlimit()
print(res) # 輸出:1000
# 遞歸最大深度:
def func(n):
print(n)
n += 1
func(n)
func(1) # python 3 打印到998就停止打印了
我們可以設置遞歸的最大深度。但是能夠達到的最大深度,跟電腦配置也有關系:
import sys
# 設置遞歸的深度
sys.setrecursionlimit(10000)
# 遞歸最大深度:
def func(n):
print(n)
n += 1
func(n)
func(1) # python 3 打印到3221就停止打印了
五、通過緩存解決遞歸限制
通過緩存解決最大遞歸限制的問題:
- Python的functools模塊中提供了很多高階函數(shù)的操作。
- lru_cache:緩存功能裝飾器,能夠緩存相同參數(shù)的函數(shù)調(diào)用結果,可以節(jié)約高開銷或I/O函數(shù)的調(diào)用時間。
- 通過lru_cache裝飾遞歸函數(shù)

六、遞歸函數(shù)使用示例
遞歸函數(shù)示例一:
# 18 20 22 24
def age(n):
if n == 1:
return 18
else:
return age(n-1) + 2
print(age(1)) # 輸出:18
print(age(2)) # 輸出:20
print(age(3)) # 輸出:22
print(age(4)) # 輸出:24
遞歸函數(shù)示例二:打印三級菜單
# 我們有一個這樣的三級菜單
menu = {
"功能測試": {
"用例管理": {
"添加用例": {},
"刪除用例": {},
"復制用例": {}
},
"元素管理": {
"添加元素": {},
"刪除元素": {},
"復制元素": {}
},
},
"接口測試": {
"API管理": {
"添加api": {},
"刪除api": {},
"復制api": {}
},
"環(huán)境管理": {
"添加環(huán)境": {},
"刪除環(huán)境": {},
"復制環(huán)境": {}
},
},
}
def query_menu(menu:dict):
"""
一級級查詢菜單信息
:return:
"""
# 用戶輸入q退出
while True:
for k in menu:print(f"當前菜單:{k}")
key = input(">>>").strip()
if key == "q": return key
elif key in menu.keys() and menu[key]:
res = query_menu(menu[key])
if res == "q":
return "q"
query_menu(menu)
輸出結果:

到此這篇關于python基礎學習之遞歸函數(shù)知識總結的文章就介紹到這了,更多相關python遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python?rpyc客戶端調(diào)用服務端方法的注意說明
這篇文章主要介紹了python?rpyc客戶端調(diào)用服務端方法的注意說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
TensorFlow人工智能學習按索引取數(shù)據(jù)及維度變換詳解
這篇文章主要為大家介紹了TensorFlow人工智能學習按索引取數(shù)據(jù)及維度變換的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python3.6實現(xiàn)連接mysql或mariadb的方法分析
這篇文章主要介紹了Python3.6實現(xiàn)連接mysql或mariadb的方法,結合實例形式分析了Python3.6針對mysql或mariadb數(shù)據(jù)庫操作的相關模塊安裝、數(shù)據(jù)庫與表的創(chuàng)建、數(shù)據(jù)庫連接等操作技巧與注意事項,需要的朋友可以參考下2018-05-05
Django模板標簽{% for %}循環(huán),獲取制定條數(shù)據(jù)實例
這篇文章主要介紹了Django模板標簽{% for %}循環(huán),獲取制定條數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python3調(diào)用百度AI識別圖片中的文字功能示例【測試可用】
這篇文章主要介紹了Python3調(diào)用百度AI識別圖片中的文字功能,結合實例形式分析了Python3安裝及使用百度AI接口的相關操作技巧,并附帶說明了百度官方AI平臺的注冊及接口調(diào)用操作方法,需要的朋友可以參考下2019-03-03

