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

python中的函數(shù)遞歸和迭代原理解析

 更新時(shí)間:2019年11月14日 09:46:46   作者:想吃手抓餅  
這篇文章主要介紹了python中的函數(shù)遞歸和迭代原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了python中的函數(shù)遞歸和迭代原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、遞歸

1、遞歸的介紹

什么是遞歸?

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計(jì)語言中廣泛應(yīng)用。 一個(gè)過程或函數(shù)在其定義或說明中有直接或間接調(diào)用自身的一種方法,它通常把一個(gè)大型復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對(duì)象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進(jìn)段和遞歸返回段。當(dāng)邊界條件不滿足時(shí),遞歸前進(jìn);當(dāng)邊界條件滿足時(shí),遞歸返回。

遞歸要注意的是,它是直接或間接調(diào)用自身,所以在使用遞歸時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口,否則,他就會(huì)陷入死循環(huán)。

尾遞歸

如果一個(gè)函數(shù)中所有遞歸形式的調(diào)用都出現(xiàn)在函數(shù)的末尾,我們稱這個(gè)遞歸函數(shù)是尾遞歸的。當(dāng)遞歸調(diào)用是整個(gè)函數(shù)體中最后執(zhí)行的語句且它的返回值不屬于表達(dá)式的一部分時(shí),這個(gè)遞歸調(diào)用就是尾遞歸。尾遞歸函數(shù)的特點(diǎn)是在回歸過程中不用做任何操作,這個(gè)特性很重要,因?yàn)榇蠖鄶?shù)現(xiàn)代的編譯器會(huì)利用這種特點(diǎn)自動(dòng)生成優(yōu)化的代碼。

python不是一門函數(shù)式編程語言,本身不支持尾遞歸(沒有對(duì)尾遞歸做優(yōu)化),而且對(duì)遞歸的次數(shù)有限制,當(dāng)遞歸深度超過1000時(shí),會(huì)拋出異常,雖然可以通過sys模塊修改提柜的深度,,但是因?yàn)椴皇俏策f歸,仍然要保存棧,內(nèi)存大小一定,不可能無限遞歸,而且無限制地遞歸調(diào)用本身是毫無意義的

import sys
sys.getrecursionlimit()
sys.setrecursionlimit(2000) # 修改遞歸深度為2000

2、遞歸的應(yīng)用

遞歸分為兩個(gè)階段:回溯和遞推  
遞推 : 把復(fù)雜的問題的求解推到比原問題簡單一些的問題的求解;

回溯 : 當(dāng)獲得最簡單的情況(遞歸出口)后,逐步返回,依次得到復(fù)雜的解

下面通過一個(gè)例子來分析這個(gè)過程 :

這是一個(gè)十進(jìn)制轉(zhuǎn)化為二進(jìn)制的函數(shù),十進(jìn)制轉(zhuǎn)化為二進(jìn)制就是 將十進(jìn)制不斷地除以2,直到商為0,然后將余數(shù)從后到前排列起來

def Decbin(x):
  result = ''
  if x:
    return Decbin(x // 2) + str(x % 2)
  else:
    return result
print(Decbin(7))

當(dāng)我們傳入x為7時(shí),很明顯x不為0,所以我們便進(jìn)入了下次一循環(huán),注意這時(shí)的第一層函數(shù)并沒有結(jié)束,而是一直在等待著下一層函數(shù)的返回結(jié)果。接著進(jìn)入了第二層函數(shù),參數(shù)為3,很明顯也不為0,接著又進(jìn)入了第三層函數(shù),此時(shí)第二層函數(shù)也在等待下一層函數(shù)的返回結(jié)果,以此類推,這就是遞歸函數(shù)的回溯。當(dāng)我們的參數(shù)為0的時(shí)候,便會(huì)執(zhí)行else的代碼,這時(shí)候函數(shù)就不再回溯,而是開始往前遞推。

二、迭代與遞歸

1、什么是迭代?

Python中的迭代是指通過重復(fù)執(zhí)行的代碼處理相似的數(shù)據(jù)集的過程,并且本次迭代的處理數(shù)據(jù)要依賴上一次的結(jié)果繼續(xù)往下做,上一次產(chǎn)生的結(jié)果為下一次產(chǎn)生結(jié)果的初始狀態(tài),如果中途有任何停頓,都不能算是迭代。常見的for循環(huán)遍歷對(duì)象就是迭代。

2、用python實(shí)現(xiàn)遞歸算法,代碼結(jié)構(gòu)較為簡單,但效率非常低下,而迭代算法可讀性強(qiáng),執(zhí)行效率也非常之快。所以在運(yùn)用遞歸算法時(shí)應(yīng)謹(jǐn)慎。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 玩轉(zhuǎn)python爬蟲之爬取糗事百科段子

    玩轉(zhuǎn)python爬蟲之爬取糗事百科段子

    這篇文章主要介紹了python爬蟲爬取糗事百科段子,詳細(xì)介紹下,如何來抓取到糗事百科里面的指定內(nèi)容,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python并發(fā)編程之IO模型

    Python并發(fā)編程之IO模型

    本文詳細(xì)講解了Python并發(fā)編程之IO模型,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 關(guān)于如何使用python的logging庫

    關(guān)于如何使用python的logging庫

    這篇文章主要介紹了關(guān)于如何使用python的logging庫,logging是Python標(biāo)準(zhǔn)庫中用于記錄日志的模塊。它提供了一種簡單但靈活的方法來記錄程序中的事件,以便稍后進(jìn)行調(diào)試和分析,需要的朋友可以參考下
    2023-04-04
  • python從入門到實(shí)踐之組合數(shù)據(jù)類型

    python從入門到實(shí)踐之組合數(shù)據(jù)類型

    這篇文章主要為大家介紹了python組合數(shù)據(jù)類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python基礎(chǔ)之文件操作

    python基礎(chǔ)之文件操作

    這篇文章主要介紹了python文件操作,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 使用Python中wordcloud庫繪制詞云圖的詳細(xì)教程

    使用Python中wordcloud庫繪制詞云圖的詳細(xì)教程

    這篇文章主要介紹了如何使用Python的wordcloud庫從Excel數(shù)據(jù)生成詞云圖,包括環(huán)境準(zhǔn)備、詞云圖的基本原理、生成詞云圖的步驟、保存詞云圖以及高級(jí)自定義(形狀與顏色),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 基于python實(shí)現(xiàn)生成指定大小txt文檔

    基于python實(shí)現(xiàn)生成指定大小txt文檔

    這篇文章主要介紹了基于python實(shí)現(xiàn)生成指定大小txt文檔,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 基于django2.2連oracle11g解決版本沖突的問題

    基于django2.2連oracle11g解決版本沖突的問題

    這篇文章主要介紹了基于django2.2連oracle11g解決版本沖突的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 詳解pandas賦值失敗問題解決

    詳解pandas賦值失敗問題解決

    這篇文章主要介紹了詳解pandas賦值失敗問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python+opencv實(shí)現(xiàn)的簡單人臉識(shí)別代碼示例

    python+opencv實(shí)現(xiàn)的簡單人臉識(shí)別代碼示例

    這篇文章主要介紹了圖像識(shí)別 python+opencv的簡單人臉識(shí)別,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-11-11

最新評(píng)論

南平市| 新巴尔虎右旗| 灵台县| 道真| 阿尔山市| 山阴县| 南康市| 本溪市| 雷州市| 沾化县| 宝鸡市| 湘西| 朔州市| 革吉县| 平顺县| 苍溪县| 武定县| 灌云县| 小金县| 收藏| 元氏县| 杭锦旗| 罗甸县| 家居| 叶城县| 永丰县| 屏南县| 榆树市| 姚安县| 广平县| 西峡县| 赤水市| 台东市| 津市市| 长顺县| 正镶白旗| 鄱阳县| 二连浩特市| 开化县| 济南市| 银川市|