最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年05月26日 11:55:14   作者:florachy  
在函數(shù)中調(diào)用函數(shù)自身,我們把這樣的函數(shù)叫做遞歸函數(shù), 遞歸函數(shù)就是循環(huán)的調(diào)用,類似于俄羅斯套娃,本文給各位小伙伴詳細介紹了python遞歸函數(shù),需要的朋友可以參考下

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

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

二、遞歸的效率問題

  • 遞歸效率不高,遞歸層次過多會導(dǎo)致棧溢出。
  • 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就停止打印了

我們可以設(shè)置遞歸的最大深度。但是能夠達到的最大深度,跟電腦配置也有關(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)用時間。
  • 通過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 = {
    "功能測試": {
        "用例管理": {
            "添加用例": {},
            "刪除用例": {},
            "復(fù)制用例": {}
        },
        "元素管理": {
            "添加元素": {},
            "刪除元素": {},
            "復(fù)制元素": {}
        },
    },
    "接口測試": {
        "API管理": {
            "添加api": {},
            "刪除api": {},
            "復(fù)制api": {}
        },
        "環(huán)境管理": {
            "添加環(huán)境": {},
            "刪除環(huán)境": {},
            "復(fù)制環(huán)境": {}
        },
    },
}

def query_menu(menu:dict):
    """
    一級級查詢菜單信息
    :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ù)知識總結(jié)的文章就介紹到這了,更多相關(guān)python遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python安裝教程全過程(2022最新)

    Python安裝教程全過程(2022最新)

    這篇文章主要介紹了Python安裝教程全過程(2022最新版本),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

    Python中判斷subprocess調(diào)起的shell命令是否結(jié)束

    這篇文章主要介紹了Python中判斷subprocess調(diào)起的shell命令是否結(jié)束的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 利用Python制作自已的動態(tài)屏保

    利用Python制作自已的動態(tài)屏保

    這篇文章主要為大家詳細介紹了如何利用Python制作自已的動態(tài)屏保,文中的示例代碼講解詳細,對我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-12-12
  • Python解惑之整數(shù)比較詳解

    Python解惑之整數(shù)比較詳解

    這篇文章主要給大家介紹了Python中整數(shù)比較的相關(guān)資料,文中通過示例代碼介紹的非常詳細,詳細會對大家學(xué)習(xí)python的整數(shù)具有一定的參考價值,需要的朋友下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-04-04
  • Python二維碼生成識別實例詳解

    Python二維碼生成識別實例詳解

    這篇文章主要介紹了Python二維碼生成識別實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 淺析Python如何實現(xiàn)Celery任務(wù)隊列系統(tǒng)

    淺析Python如何實現(xiàn)Celery任務(wù)隊列系統(tǒng)

    這篇文章主要為大家詳細介紹了一個基于 Celery 和 Redis 的分布式任務(wù)隊列系統(tǒng),用于處理異步任務(wù)和定時任務(wù),希望對大家有一定的幫助
    2025-04-04
  • Python基礎(chǔ)之Spyder的使用

    Python基礎(chǔ)之Spyder的使用

    Spyder是一個用于科學(xué)計算的使用Python編程語言的集成開發(fā)環(huán)境(IDE),它結(jié)合了綜合開發(fā)工具的高級編輯、分析、調(diào)試等功能,需要的朋友可以參考下
    2023-05-05
  • Python Beautiful Soup模塊使用教程詳解

    Python Beautiful Soup模塊使用教程詳解

    Beautiful Soup 簡稱 BS4(其中 4 表示版本號)是一個 Python 中常用的頁面解析庫,它可以從 HTML 或 XML 文檔中快速地提取指定的數(shù)據(jù),這篇文章主要介紹了Python Beautiful Soup模塊的使用
    2023-02-02
  • 一文詳解如何使用Python從字符串中提取數(shù)字

    一文詳解如何使用Python從字符串中提取數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何使用Python從字符串中提取數(shù)字的相關(guān)資料,我們在進行數(shù)據(jù)處理時候,可能想要提取字符串中的數(shù)字進行分析,需要的朋友可以參考下
    2023-11-11
  • 使用python處理題庫表格并轉(zhuǎn)化為word形式的實現(xiàn)

    使用python處理題庫表格并轉(zhuǎn)化為word形式的實現(xiàn)

    這篇文章主要介紹了使用python處理題庫表格并轉(zhuǎn)化為word形式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論

兴海县| 枞阳县| 卫辉市| 西畴县| 苗栗市| 吉林市| 吴江市| 阿城市| 东海县| 辽阳县| 灵石县| 碌曲县| 雅安市| 兴国县| 宝清县| 绍兴市| 乳源| 高雄县| 临夏市| 乌兰县| 灵台县| 西昌市| 双桥区| 凤凰县| 陈巴尔虎旗| 嵩明县| 南靖县| 喀什市| 获嘉县| 共和县| 宁波市| 耿马| 韶山市| 芷江| 崇左市| 娱乐| 平邑县| 渭南市| 大安市| 成都市| 广宗县|