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

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

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

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

一、遞歸

1、遞歸的介紹

什么是遞歸?

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

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

尾遞歸

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

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

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

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

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

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

下面通過一個例子來分析這個過程 :

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

二、迭代與遞歸

1、什么是迭代?

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

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

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

相關(guān)文章

  • TensorFlow的自動求導(dǎo)原理分析

    TensorFlow的自動求導(dǎo)原理分析

    這篇文章主要介紹了TensorFlow的自動求導(dǎo)原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)

    python 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)

    下面小編就為大家?guī)硪黄猵ython 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python While循環(huán)語句實例演示及原理解析

    Python While循環(huán)語句實例演示及原理解析

    這篇文章主要介紹了Python While循環(huán)語句實例演示及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • python遞歸刪除指定目錄及其所有內(nèi)容的方法

    python遞歸刪除指定目錄及其所有內(nèi)容的方法

    下面小編就為大家?guī)硪黄猵ython遞歸刪除指定目錄及其所有內(nèi)容的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python 列表推導(dǎo)式與字典推導(dǎo)式的實現(xiàn)

    Python 列表推導(dǎo)式與字典推導(dǎo)式的實現(xiàn)

    本文主要介紹了Python 列表推導(dǎo)式與字典推導(dǎo)式的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Python中新式類與經(jīng)典類的區(qū)別詳析

    Python中新式類與經(jīng)典類的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Python中新式類與經(jīng)典類的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • TensorFlow實現(xiàn)打印每一層的輸出

    TensorFlow實現(xiàn)打印每一層的輸出

    今天小編就為大家分享一篇TensorFlow實現(xiàn)打印每一層的輸出,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • pyinstaller打包python3.6和PyQt5中各種錯誤的解決方案匯總

    pyinstaller打包python3.6和PyQt5中各種錯誤的解決方案匯總

    pyinstaller是打包python很方便的一個套件,我們可以很輕易地使用他,下面這篇文章主要給大家介紹了關(guān)于pyinstaller打包python3.6和PyQt5中各種錯誤解決的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 使用pyinstaller打包PyQt4程序遇到的問題及解決方法

    使用pyinstaller打包PyQt4程序遇到的問題及解決方法

    今天小編就為大家分享一篇使用pyinstaller打包PyQt4程序遇到的問題及解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 簡單談?wù)刾ython的反射機制

    簡單談?wù)刾ython的反射機制

    本文主要介紹python中的反射,以及該機制的簡單應(yīng)用,熟悉JAVA的程序員,一定經(jīng)常和Class.forName打交道。在很多框架中(Spring,eclipse plugin機制)都依賴于JAVA的反射能力,而在python中,也同樣有著強大的反射能力,本文將做簡單的介紹
    2016-06-06

最新評論