欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

二、遞歸的效率問(wèn)題

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

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

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

# ---------------通過(guò)定義一個(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就停止打印了

五、通過(guò)緩存解決遞歸限制

通過(guò)緩存解決最大遞歸限制的問(wèn)題:

  • Python的functools模塊中提供了很多高階函數(shù)的操作。
  • lru_cache:緩存功能裝飾器,能夠緩存相同參數(shù)的函數(shù)調(diào)用結(jié)果,可以節(jié)約高開(kāi)銷(xiāo)或I/O函數(shù)的調(diào)用時(shí)間。
  • 通過(guò)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 = {
    "功能測(cè)試": {
        "用例管理": {
            "添加用例": {},
            "刪除用例": {},
            "復(fù)制用例": {}
        },
        "元素管理": {
            "添加元素": {},
            "刪除元素": {},
            "復(fù)制元素": {}
        },
    },
    "接口測(cè)試": {
        "API管理": {
            "添加api": {},
            "刪除api": {},
            "復(fù)制api": {}
        },
        "環(huán)境管理": {
            "添加環(huán)境": {},
            "刪除環(huán)境": {},
            "復(fù)制環(huán)境": {}
        },
    },
}

def query_menu(menu:dict):
    """
    一級(jí)級(jí)查詢(xún)菜單信息
    :return:
    """
    # 用戶(hù)輸入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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • selenium常用API的使用過(guò)程記錄(包括自動(dòng)登錄)

    selenium常用API的使用過(guò)程記錄(包括自動(dòng)登錄)

    selenium是一個(gè)自動(dòng)測(cè)試工具,它可以幫我通過(guò)代碼去實(shí)現(xiàn)驅(qū)動(dòng)瀏覽器自動(dòng)執(zhí)行相應(yīng)的操作,所以我們也可以用它來(lái)做爬蟲(chóng),主要使用selenium的目的是為了跳過(guò)登錄驗(yàn)證,這篇文章主要介紹了selenium的使用過(guò)程記錄,已經(jīng)常用API接口(包括自動(dòng)登錄)
    2024-02-02
  • python?rpyc客戶(hù)端調(diào)用服務(wù)端方法的注意說(shuō)明

    python?rpyc客戶(hù)端調(diào)用服務(wù)端方法的注意說(shuō)明

    這篇文章主要介紹了python?rpyc客戶(hù)端調(diào)用服務(wù)端方法的注意說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • TensorFlow人工智能學(xué)習(xí)按索引取數(shù)據(jù)及維度變換詳解

    TensorFlow人工智能學(xué)習(xí)按索引取數(shù)據(jù)及維度變換詳解

    這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)按索引取數(shù)據(jù)及維度變換的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Python3.6實(shí)現(xiàn)連接mysql或mariadb的方法分析

    Python3.6實(shí)現(xiàn)連接mysql或mariadb的方法分析

    這篇文章主要介紹了Python3.6實(shí)現(xiàn)連接mysql或mariadb的方法,結(jié)合實(shí)例形式分析了Python3.6針對(duì)mysql或mariadb數(shù)據(jù)庫(kù)操作的相關(guān)模塊安裝、數(shù)據(jù)庫(kù)與表的創(chuàng)建、數(shù)據(jù)庫(kù)連接等操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-05-05
  • Django模板標(biāo)簽{% for %}循環(huán),獲取制定條數(shù)據(jù)實(shí)例

    Django模板標(biāo)簽{% for %}循環(huán),獲取制定條數(shù)據(jù)實(shí)例

    這篇文章主要介紹了Django模板標(biāo)簽{% for %}循環(huán),獲取制定條數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • python 讀寫(xiě)文件,按行修改文件的方法

    python 讀寫(xiě)文件,按行修改文件的方法

    今天小編就為大家分享一篇python 讀寫(xiě)文件,按行修改文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python中partial()基礎(chǔ)用法說(shuō)明

    python中partial()基礎(chǔ)用法說(shuō)明

    這篇文章主要給大家介紹了關(guān)于python中partial()基礎(chǔ)用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-12-12
  • Python3調(diào)用百度AI識(shí)別圖片中的文字功能示例【測(cè)試可用】

    Python3調(diào)用百度AI識(shí)別圖片中的文字功能示例【測(cè)試可用】

    這篇文章主要介紹了Python3調(diào)用百度AI識(shí)別圖片中的文字功能,結(jié)合實(shí)例形式分析了Python3安裝及使用百度AI接口的相關(guān)操作技巧,并附帶說(shuō)明了百度官方AI平臺(tái)的注冊(cè)及接口調(diào)用操作方法,需要的朋友可以參考下
    2019-03-03
  • 詳解python深淺拷貝區(qū)別

    詳解python深淺拷貝區(qū)別

    在本篇文章里小編給大家整理了關(guān)于python深淺拷貝區(qū)別的相關(guān)知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以參考下。
    2019-06-06
  • Python Pandas的簡(jiǎn)單使用教程

    Python Pandas的簡(jiǎn)單使用教程

    Pandas 是python的一個(gè)數(shù)據(jù)分析包,最初由AQR Capital Management于2008年4月開(kāi)發(fā),并于2009年底開(kāi)源出來(lái),目前由專(zhuān)注于Python數(shù)據(jù)包開(kāi)發(fā)的PyData開(kāi)發(fā)team繼續(xù)開(kāi)發(fā)和維護(hù),今天通過(guò)本文給大家介紹Python Pandas的簡(jiǎn)單使用教程,感興趣的朋友一起看看吧
    2021-08-08

最新評(píng)論