主頁 > 知識(shí)庫 > python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)

python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)

熱門標(biāo)簽:河北防封卡電銷卡 應(yīng)電話機(jī)器人打電話違法嗎 400電話辦理哪種 手機(jī)網(wǎng)頁嵌入地圖標(biāo)注位置 開封自動(dòng)外呼系統(tǒng)怎么收費(fèi) 開封語音外呼系統(tǒng)代理商 天津電話機(jī)器人公司 地圖標(biāo)注線上如何操作 電銷機(jī)器人的風(fēng)險(xiǎn)

一、遞歸函數(shù)使用注意點(diǎn)

遞歸函數(shù)一定要編寫終止條件,否則將產(chǎn)生無限遞歸。(死循環(huán))

二、遞歸的效率問題

  • 遞歸效率不高,遞歸層次過多會(huì)導(dǎo)致棧溢出。
  • Python中不推薦使用遞歸。

三、遞歸函數(shù)引入

"""
使用代碼循環(huán)輸出故事:從前有座山,山里有座廟...
"""
# ------------while循環(huán) (暫時(shí)忽略死循環(huán))---------------
while True:
    print("從前有座山,山里有座廟...")

# ---------------通過定義一個(gè)方法, 在while循環(huán)里面調(diào)用實(shí)現(xiàn)( 暫時(shí)忽略死循環(huán))---------------
def func_story():
    print("從前有座山,山里有座廟...")

while True: 
    func_story()

# ---------------使用遞歸的方法實(shí)現(xiàn)循環(huán)---------------
def story():
    print("從前有座山,山里有座廟...")
    story()

story()
# 報(bào)錯(cuò):RecursionError: maximum recursion depth exceeded while calling a Python object

四、遞歸的深度

這里就引申到一個(gè)遞歸的最大深度。

import sys

# 獲取最大遞歸深度
res = sys.getrecursionlimit()
print(res) # 輸出:1000

# 遞歸最大深度:
def func(n):
    print(n)
    n += 1
    func(n)


func(1)  # python 3 打印到998就停止打印了

我們可以設(shè)置遞歸的最大深度。但是能夠達(dá)到的最大深度,跟電腦配置也有關(guān)系:

import sys

# 設(shè)置遞歸的深度
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é)果,可以節(jié)約高開銷或I/O函數(shù)的調(diào)用時(shí)間。
  • 通過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ù)示例二:打印三級(jí)菜單

# 我們有一個(gè)這樣的三級(jí)菜單
menu = {
    "功能測試": {
        "用例管理": {
            "添加用例": {},
            "刪除用例": {},
            "復(fù)制用例": {}
        },
        "元素管理": {
            "添加元素": {},
            "刪除元素": {},
            "復(fù)制元素": {}
        },
    },
    "接口測試": {
        "API管理": {
            "添加api": {},
            "刪除api": {},
            "復(fù)制api": {}
        },
        "環(huán)境管理": {
            "添加環(huán)境": {},
            "刪除環(huán)境": {},
            "復(fù)制環(huán)境": {}
        },
    },
}

def query_menu(menu:dict):
    """
    一級(jí)級(jí)查詢菜單信息
    :return:
    """
    # 用戶輸入q退出
    while True:
        for k in menu:print(f"當(dāng)前菜單:{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)

輸出結(jié)果:

到此這篇關(guān)于python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)python遞歸函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python中的np.argmin()和np.argmax()函數(shù)用法
  • Python函數(shù)參數(shù)和注解的使用
  • python中os.path.join()函數(shù)實(shí)例用法
  • 淺談Python中的函數(shù)(def)及參數(shù)傳遞操作
  • python 定義函數(shù) 返回值只取其中一個(gè)的實(shí)現(xiàn)
  • python print()函數(shù)的end參數(shù)和sep參數(shù)的用法說明
  • python處理emoji表情(兩個(gè)函數(shù)解決兩者之間的聯(lián)系)
  • Python基礎(chǔ)學(xué)習(xí)之簡單理解函數(shù)

標(biāo)簽:蘭州 駐馬店 六盤水 江蘇 山東 成都 宿遷 常州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)》,本文關(guān)鍵詞  python,基礎(chǔ),學(xué),習(xí)之,遞歸,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識(shí)總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章