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

python函數(shù)遞歸調(diào)用的實(shí)現(xiàn)

 更新時(shí)間:2023年05月06日 16:14:11   作者:程序員 老波  
本文主要介紹了python函數(shù)遞歸調(diào)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

引入

函數(shù)既可以嵌套定義也可以嵌套調(diào)用。嵌套定義指的是在定義一個(gè)函數(shù)時(shí)在該函數(shù)內(nèi)部定義另一個(gè)函數(shù);嵌套調(diào)用指的是在調(diào)用一個(gè)函數(shù)的過(guò)程中函數(shù)內(nèi)部有調(diào)用另一個(gè)函數(shù)。而函數(shù)的遞歸調(diào)用指的是在調(diào)用一個(gè)函數(shù)的過(guò)程中又直接或者間接的調(diào)用該函數(shù)本身。

函數(shù)遞歸介紹

函數(shù)遞歸就是函數(shù)的遞歸調(diào)用,是函數(shù)嵌套調(diào)用的一種特殊形式,具體就是指在調(diào)用一個(gè)函數(shù)的過(guò)程中直接或者間接的調(diào)用到本身,遞歸的本質(zhì)就是循環(huán)做重復(fù)的事情。

在調(diào)用func的過(guò)程中又調(diào)用func,這就是直接調(diào)用函數(shù)本身;

在調(diào)用func的過(guò)程中調(diào)用foo,而在調(diào)用foo的過(guò)程中又調(diào)用func,這就是間接調(diào)用func本身。

通過(guò)上面的分析,兩種情況下的函數(shù)遞歸調(diào)用都是一個(gè)無(wú)限循環(huán)的過(guò)程,Python為了防止函數(shù)遞歸進(jìn)入無(wú)限循環(huán)對(duì)函數(shù)遞歸調(diào)用的深度做了限制,一旦超出限制就會(huì)拋出異常。

def foo():
    print('foo')
    func()
def func():
    print('func')
    foo()
func()
'''
程序運(yùn)行結(jié)果:
RecursionError: maximum recursion depth exceeded while calling a Python object(超過(guò)最大遞歸深度)
'''

因此為了避免函數(shù)遞歸調(diào)用報(bào)錯(cuò),就必須在滿足某中條件的情況下結(jié)束對(duì)函數(shù)的遞歸調(diào)用。

def foo(n):
    if n == 1:
        print('遞歸結(jié)束')
        return
    else:
        foo(n-1)
foo(2)

函數(shù)遞歸原理及使用

通過(guò)一個(gè)簡(jiǎn)單的小學(xué)數(shù)學(xué)題說(shuō)明遞歸的原理及使用。

小一比小二多一個(gè)蘋果,小二比小三多一個(gè)蘋果,小三比小四多一個(gè)蘋果,小四有兩個(gè)蘋果,問小一有幾個(gè)蘋果?

這個(gè)題目非常簡(jiǎn)單,解答思路如下:

要想知道小一的蘋果數(shù)量就需要知道小二的蘋果數(shù)量,而小二的蘋果數(shù)量又取決于小三,小三的蘋果數(shù)量又是基于小四的蘋果數(shù)量:
app_num(1) = app_num(2) + 1
app_num(2) = app_num(3) + 1
app_num(3) = app_num(4) + 1
app_num(4) = 2
因此可以總結(jié)出下面的結(jié)論:
app_num(4) = 2 
app_num(x) = app_num(x+1) + 1

很明顯是一個(gè)重復(fù)調(diào)用同一種方法的過(guò)程,只是參數(shù)不同,也就是一個(gè)遞歸的過(guò)程,通過(guò)上面的分析可以將遞歸過(guò)程分為兩個(gè)階段 - 回溯和遞推。

回溯階段:想要計(jì)算小一(x=1)的蘋果數(shù)量就需要回溯得到小二(x+1)的蘋果,以此類推,直到得到小四的蘋果個(gè)數(shù),此時(shí)app_num(4)已知,就無(wú)需再向前回溯。

遞推階段:從小四的蘋果數(shù)量可以推算出小三的蘋果數(shù)量,從小三的蘋果數(shù)量可以推算出小二的,以此類推,一直推算出小一的蘋果數(shù)量為止,遞歸結(jié)束。需要注意的是,遞歸一定要有結(jié)束條件,這里當(dāng)x=1就是結(jié)束條件。

遞歸的本質(zhì)就是在做重復(fù)的事情,理論上說(shuō)遞歸可以解決的問題循環(huán)也都可以解決,只不過(guò)是在某種情況下使用遞歸更容易實(shí)現(xiàn)。

def apple_num(x):
    if x == 4:  # 結(jié)束遞歸的條件
        return 2
    return apple_num(x+1) + 1
apple_num1 = apple_num(1)
print(apple_num1)  # 5

Practice

一個(gè)嵌套多層的列表要求打印出所有的元素。

list1 = [[[1, 2], [3, 4], [5, [6, 7], [8, 9, 10], 11, 12], 13]]
def func(items):
    for elements in items:
        if type(elements) is list:
            func(elements)
        else:
            print(elements)
func(list1)

有一個(gè)按照從小到大順序排列的數(shù)字列表,需要從該數(shù)字列表中找到我們想要的數(shù)字,如何更高效?

# 使用二分法:先取出列表的中間位置的值,與需要的數(shù)字進(jìn)行比較,如果中間位置的值大于需要的值,那么就在中間值的左側(cè)2 進(jìn)行比較,如果小于,那么就在中間值的右側(cè)進(jìn)行比較,如果剛好等于,就輸出值。然后對(duì)上述步驟進(jìn)行循環(huán)
list1 = [0,2,5,7,9,11,34]
find_num = 2
def func(find_num,list1):
    # 輸出每次切分后生成的list1
    print(list1)
    mid_index = len(list1) // 2
    if find_num > list1[mid_index]:
        list1 = list1[mid_index+1:]
        func(find_num,list1)
    elif find_num < list1[mid_index]:
        list1 = list1[:mid_index]
        func(find_num,list1)
    elif find_num == list1[mid_index]:
        print(f'找到了{(lán)list1[mid_index]},索引為{mid_index}')
    elif len(list1)  == 0:
        print('不存在這個(gè)值')
        return
func(find_num,list1)

到此這篇關(guān)于python函數(shù)遞歸調(diào)用的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python函數(shù)遞歸調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)

    利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法總結(jié)

    loc是location的意思,和iloc中i的意思是指integer,所以它只接受整數(shù)作為參數(shù),下面這篇文章主要給大家介紹了關(guān)于利用Pandas讀取某列某行數(shù)據(jù)之loc和iloc用法的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Python中的兩個(gè)列表數(shù)值加法

    Python中的兩個(gè)列表數(shù)值加法

    這篇文章主要介紹了Python中的兩個(gè)列表數(shù)值加法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python區(qū)塊鏈實(shí)現(xiàn)簡(jiǎn)版工作量證明

    python區(qū)塊鏈實(shí)現(xiàn)簡(jiǎn)版工作量證明

    這篇文章主要為大家介紹了python區(qū)塊鏈實(shí)現(xiàn)簡(jiǎn)版工作量證明詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python3實(shí)現(xiàn)讀取chrome瀏覽器cookie

    python3實(shí)現(xiàn)讀取chrome瀏覽器cookie

    這里給大家分享的是python3讀取chrome瀏覽器的cookie(CryptUnprotectData解密)的代碼,主要思路是讀取到的cookies被封裝成字典,可以直接給requests使用。
    2016-06-06
  • 對(duì)python pandas 畫移動(dòng)平均線的方法詳解

    對(duì)python pandas 畫移動(dòng)平均線的方法詳解

    今天小編就為大家分享一篇對(duì)python pandas 畫移動(dòng)平均線的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • tensorflow 實(shí)現(xiàn)自定義梯度反向傳播代碼

    tensorflow 實(shí)現(xiàn)自定義梯度反向傳播代碼

    今天小編就為大家分享一篇tensorflow 實(shí)現(xiàn)自定義梯度反向傳播代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python讀取指定字節(jié)長(zhǎng)度的文本方法

    python讀取指定字節(jié)長(zhǎng)度的文本方法

    今天小編就為大家分享一篇python讀取指定字節(jié)長(zhǎng)度的文本方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python實(shí)現(xiàn)京東秒殺功能代碼

    Python實(shí)現(xiàn)京東秒殺功能代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)京東秒殺功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • openCV入門學(xué)習(xí)基礎(chǔ)教程第三篇

    openCV入門學(xué)習(xí)基礎(chǔ)教程第三篇

    pencv是用于快速處理圖像處理、計(jì)算機(jī)視覺問題的工具,支持多種語(yǔ)言進(jìn)行開發(fā)如c++、python、java等,下面這篇文章主要給大家介紹了關(guān)于openCV入門學(xué)習(xí)基礎(chǔ)教程的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • python argparse命令行參數(shù)解析(推薦)

    python argparse命令行參數(shù)解析(推薦)

    Python argparse模塊是解析命令行參數(shù)的首選方法。解析命令行參數(shù)是一個(gè)非常常見的任務(wù),Python腳本根據(jù)傳遞的值來(lái)執(zhí)行和操作
    2021-06-06

最新評(píng)論

隆德县| 武宁县| 屏边| 安仁县| 山西省| 和顺县| 乳源| 微博| 永昌县| 密山市| 呼和浩特市| 玉屏| 和顺县| 格尔木市| 铜梁县| 新丰县| 永新县| 故城县| 恩平市| 合川市| 孙吴县| 独山县| 孝义市| 芦山县| 故城县| 黄平县| 信宜市| 鱼台县| 远安县| 万全县| 新干县| 绵竹市| 呼图壁县| 嘉兴市| 贡觉县| 新巴尔虎右旗| 凤翔县| 资溪县| 雅安市| 祥云县| 沽源县|