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

Python中的遞歸函數(shù)使用詳解

 更新時間:2023年12月06日 09:27:11   作者:凌冰_  
這篇文章主要介紹了Python中的遞歸函數(shù)使用詳解,遞歸函數(shù)是指某個函數(shù)調(diào)用自己或者調(diào)用其他函數(shù)后再次調(diào)用自己,由于不能無限嵌套調(diào)用,所以某個遞歸函數(shù)一定存在至少兩個分支,一個是退出嵌套,不再直接或者間接調(diào)用自己;另外一個則是繼續(xù)嵌套,需要的朋友可以參考下

一、什么是遞歸

在函數(shù)內(nèi)部調(diào)用自己的函數(shù)。

二、什么是遞歸調(diào)用

一種特殊的嵌套調(diào)用,是指某個函數(shù)調(diào)用自己或者調(diào)用其他函數(shù)后再次調(diào)用自己。

由于不能無限嵌套調(diào)用,所以某個遞歸函數(shù)一定存在至少兩個分支,一個是退出嵌套,不再直接或者間接調(diào)用自己;另外一個則是繼續(xù)嵌套。

一般通過函數(shù)的輸入?yún)?shù)來決定走哪個分支,所以遞歸函數(shù)一般都是帶有參數(shù)的。

三、應(yīng)用實例

1、遞歸函數(shù):求和

def  funs(n):
    #1+2+3+4=10
    # 退出遞歸的分支
    if n==1:
       return 1
    # 遞歸調(diào)用
    return n+funs(n-1)
 
 # 求4的和
print(funs(4))

2、遞歸函數(shù):求階乘

def get_factorial(n):  # 定義階乘函數(shù)
    #1*2*3*4=24
    # 退出遞歸的分支
    if n==1:
        return 1
    # 遞歸調(diào)用
    return n*get_factorial(n-1)
 
 # 求4的階乘
print(get_factorial(4))

3、斐波拉契級數(shù)

有這樣一個數(shù)列:1,1,2,3,5,8,13,21,34…。其第一元素和第二個元素等于 1,其他元素等于其前面兩個元素的和。用數(shù)學公式表示如下:

# 分析:
# A  age(4) = age(4-1) +8
# B  age(3) = age(3-1) + 8
# C  age(2) = age(2-1) + 8
# D  age(1) = 16
# 回溯:一層一層的調(diào)用下去
# 遞推:滿足某種結(jié)束條件后,結(jié)束遞歸調(diào)用,然后一層一層返回。
def get_age(n):
    if n==1:  #結(jié)束遞歸調(diào)用
        return 16
    else:  #遞歸調(diào)用
        return get_age(n-1)+8
 
print(get_age(1))  #第1個人年齡
print(get_age(4))  #第4個人年齡

4、詢問年齡:A比B大8歲,B比C大8歲,C比D大8歲,D是16歲

# 分析:
# A  age(4) = age(4-1) +8
# B  age(3) = age(3-1) + 8
# C  age(2) = age(2-1) + 8
# D  age(1) = 16
# 回溯:一層一層的調(diào)用下去
# 遞推:滿足某種結(jié)束條件后,結(jié)束遞歸調(diào)用,然后一層一層返回。
def get_age(n):
    if n==1:  #結(jié)束遞歸調(diào)用
        return 16
    else:  #遞歸調(diào)用
        return get_age(n-1)+8
 
print(get_age(1))  #第1個人年齡
print(get_age(4))  #第4個人年齡

5、對于一個有n個元素的列表,全排列得到所有的這些排列的列表。

一般對于 n 個元素的列表有 n! 種排列方式。如對于 [1,2,3] 有下面幾種排列方法:

def get_combination(ll,start):
    """
    :param ll:  排序的列表
    :param start: 起始位置一般為0
    :return: 空
    """
    end=len(ll)  #記錄元素個數(shù)
    if start==end:   #遞歸的結(jié)束條件
        print(ll)
    else:
        i=start  #指向本次需要排列的第一個位置(本輪需要固定的位置)
    # 循環(huán)排列的序列中的每一個數(shù),
    for n in range(start,end):
        # 依次交換數(shù)據(jù)
        ll[n],ll[i]=ll[i],ll[n]
        #遞歸調(diào)用
        get_combination(ll,start+1)
        # 回到上一步,交換數(shù)據(jù)
        ll[n],ll[i]=ll[i],ll[n]
 
 
#1*2*3=6
get_combination([1,2,3],0)
 
#1*2*3*4=24
get_combination(['red','yellow','green','blue'],0)

全排列

四、引用標準庫函數(shù):itertools庫

1、全排列可以使用這個標準庫函數(shù)

import itertools
print(list(itertools.permutations([1, 2, 3], 3)))
 
print(list(itertools.permutations(range(3), 2)))

五、遞歸函數(shù)調(diào)用深度的默認最大值為 1000

1、當調(diào)用階乘使用10萬時 ,print(get_factorial(100000)),發(fā)生以下異常:

說明:

注意遞歸的深度。

由于遞歸會產(chǎn)生多次函數(shù)調(diào)用,而函數(shù)調(diào)用會消耗代碼的??臻g,如果遞歸的深度太大,會導(dǎo)致棧溢出。

以上面的階乘為例,如果計算 100000 的階乘,在一般機器上都會出現(xiàn)棧溢出的問題

默認情況下,函數(shù)調(diào)用深度的最大值為 1000,如果達到或者超過 1000 就會出現(xiàn)上面的錯誤信息。

import sys
 
# 得到最大調(diào)用深度
print(sys.getrecursionlimit())

如果希望修改該系統(tǒng)值,也可以通過 sys 模塊的接口函數(shù)來實現(xiàn)。 如希望最大函數(shù)調(diào)用深度為 100000,那么可以使用下面的代碼進行修改:

# 設(shè)定最大調(diào)用深度
sys.setrecursionlimit(10000)

到此這篇關(guān)于Python中的遞歸函數(shù)使用詳解的文章就介紹到這了,更多相關(guān)Python遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python3 pygame實現(xiàn)接小球游戲

    python3 pygame實現(xiàn)接小球游戲

    這篇文章主要為大家詳細介紹了python3 pygame實現(xiàn)接小球游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 淺談python內(nèi)置函數(shù)callable的用法

    淺談python內(nèi)置函數(shù)callable的用法

    這篇文章主要介紹了淺談python內(nèi)置函數(shù)callable的用法, callable函數(shù)可用于判斷一個對象是否可以被調(diào)用,若對象可以被調(diào)用則返回True,反之則返回False,需要的朋友可以參考下
    2023-04-04
  • Python 中將秒轉(zhuǎn)換為小時、分鐘和秒的示例代碼

    Python 中將秒轉(zhuǎn)換為小時、分鐘和秒的示例代碼

    這篇文章主要介紹了在 Python 中將秒轉(zhuǎn)換為小時、分鐘和秒,本篇文章將討論使用 Python 中的四種不同方法來使用、管理秒并將其轉(zhuǎn)換為天、小時、分鐘和秒,需要的朋友可以參考下
    2023-05-05
  • PyCharm下載和安裝詳細步驟

    PyCharm下載和安裝詳細步驟

    這篇文章主要介紹了PyCharm下載和安裝詳細步驟,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • python 列表刪除所有指定元素的方法

    python 列表刪除所有指定元素的方法

    下面小編就為大家分享一篇python 列表刪除所有指定元素的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python爬蟲實現(xiàn)中英翻譯詞典

    python爬蟲實現(xiàn)中英翻譯詞典

    這篇文章主要為大家詳細介紹了python爬蟲實現(xiàn)中英翻譯詞典,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python basicConfig()簡介及用法舉例

    python basicConfig()簡介及用法舉例

    logging.basicConfig() 是 Python logging 模塊中最常用的配置函數(shù),用于一次性設(shè)置日志系統(tǒng)的基本參數(shù)(如日志級別、輸出格式、輸出位置等),本文給大家介紹python basicConfig()簡介及用法舉例,感興趣的朋友一起看看吧
    2025-08-08
  • Python實現(xiàn)各種郵件發(fā)送

    Python實現(xiàn)各種郵件發(fā)送

    這篇文章主要介紹了Python實現(xiàn)各種郵件發(fā)送,Python內(nèi)置對SMTP的支持,可以發(fā)送純文本郵件、HTML郵件以及帶附件的郵件,下文詳細實現(xiàn)過程需要的小伙伴可以參考一下
    2022-05-05
  • Python 實現(xiàn)Serial 與STM32J進行串口通訊

    Python 實現(xiàn)Serial 與STM32J進行串口通訊

    今天小編就為大家分享一篇Python 實現(xiàn)Serial 與STM32J進行串口通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中循環(huán)引用(import)失敗的解決方法

    Python中循環(huán)引用(import)失敗的解決方法

    在python中常常會遇到循環(huán)import即circular import的問題,下面這篇文章主要給大家介紹了關(guān)于Python中循環(huán)引用(import)失敗的解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起學習學習吧。
    2018-04-04

最新評論

延庆县| 静宁县| 全南县| 堆龙德庆县| 葵青区| 北宁市| 都江堰市| 新建县| 无极县| 怀远县| 渭源县| 微山县| 新昌县| 贺州市| 肃南| 太白县| 舟山市| 曲沃县| 迁西县| 安塞县| 边坝县| 五莲县| 顺平县| 南江县| 平南县| 隆化县| 长宁区| 兴宁市| 咸宁市| 五指山市| 五莲县| 梅河口市| 苏州市| 碌曲县| 新河县| 夏邑县| 昆明市| 宾川县| 牟定县| 石阡县| 万山特区|