溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python基礎學習之遞歸函數怎么用

發(fā)布時間:2021-05-27 11:21:28 來源:億速云 閱讀:137 作者:小新 欄目:開發(fā)技術

小編給大家分享一下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裝飾遞歸函數

python基礎學習之遞歸函數怎么用
python基礎學習之遞歸函數怎么用 

六、遞歸函數使用示例

遞歸函數示例一:

# 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基礎學習之遞歸函數怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI