python基礎學習之遞歸函數知識總結
更新時間:2021年05月26日 11:55:14 作者:florachy
在函數中調用函數自身,我們把這樣的函數叫做遞歸函數,
遞歸函數就是循環(huán)的調用,類似于俄羅斯套娃,本文給各位小伙伴詳細介紹了python遞歸函數,需要的朋友可以參考下
一、遞歸函數使用注意點
遞歸函數一定要編寫終止條件,否則將產生無限遞歸。(死循環(huán))
二、遞歸的效率問題
- 遞歸效率不高,遞歸層次過多會導致棧溢出。
- Python中不推薦使用遞歸。
三、遞歸函數引入
""" 使用代碼循環(huán)輸出故事:從前有座山,山里有座廟... """ # ------------while循環(huán) (暫時忽略死循環(huán))--------------- while True: print("從前有座山,山里有座廟...") # ---------------通過定義一個方法, 在while循環(huán)里面調用實現( 暫時忽略死循環(huán))--------------- def func_story(): print("從前有座山,山里有座廟...") while True: func_story() # ---------------使用遞歸的方法實現循環(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模塊中提供了很多高階函數的操作。
- lru_cache:緩存功能裝飾器,能夠緩存相同參數的函數調用結果,可以節(jié)約高開銷或I/O函數的調用時間。
- 通過lru_cache裝飾遞歸函數
六、遞歸函數使用示例
遞歸函數示例一:
# 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
遞歸函數示例二:打印三級菜單
# 我們有一個這樣的三級菜單 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基礎學習之遞歸函數知識總結的文章就介紹到這了,更多相關python遞歸函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python3.6實現連接mysql或mariadb的方法分析
這篇文章主要介紹了Python3.6實現連接mysql或mariadb的方法,結合實例形式分析了Python3.6針對mysql或mariadb數據庫操作的相關模塊安裝、數據庫與表的創(chuàng)建、數據庫連接等操作技巧與注意事項,需要的朋友可以參考下2018-05-05Django模板標簽{% for %}循環(huán),獲取制定條數據實例
這篇文章主要介紹了Django模板標簽{% for %}循環(huán),獲取制定條數據實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python3調用百度AI識別圖片中的文字功能示例【測試可用】
這篇文章主要介紹了Python3調用百度AI識別圖片中的文字功能,結合實例形式分析了Python3安裝及使用百度AI接口的相關操作技巧,并附帶說明了百度官方AI平臺的注冊及接口調用操作方法,需要的朋友可以參考下2019-03-03