Python中如何實現(xiàn)遞歸函數(shù)

這篇文章主要介紹Python中如何實現(xiàn)遞歸函數(shù),文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

五寨網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

1、什么是遞歸函數(shù)

之前介紹了如何創(chuàng)建和調(diào)用函數(shù)。你知道,函數(shù)可調(diào)用其他函數(shù),但可能讓你感到驚訝的是,函數(shù)還可調(diào)用自己。如果你以前沒有遇到這種情況,可能想知道遞歸是什么意思。簡單地說,遞歸意味著引用(這里是調(diào)用)自身。

2、python遞歸函數(shù)

下面是一個遞歸式函數(shù)定義:

def recursion():

    return recursion()

這個定義顯然什么都沒有做,與剛才的“遞歸”定義一樣傻。如果你運行它,結(jié)果將如何呢?你將發(fā)現(xiàn)運行一段時間后,這個程序崩潰了(引發(fā)異常)。從理論上說,這個程序?qū)⒉粩噙\行下去,但每次調(diào)用函數(shù)時,都將消耗一些內(nèi)存。因此函數(shù)調(diào)用次數(shù)達到一定的程度(且之前的函數(shù)調(diào)用未返回)后,將耗盡所有的內(nèi)存空間,導(dǎo)致程序終止并顯示錯誤消息“超過大遞歸深度”

你想要的是能對你有所幫助的遞歸函 數(shù),這樣的遞歸函數(shù)通常包含下面兩部分。

  • 基線條件(針對小的問題):滿足這種條件時函數(shù)將直接返回一個值。 

  • 遞歸條件:包含一個或多個調(diào)用,這些調(diào)用旨在解決問題的一部分。

這里的關(guān)鍵是,通過將問題分解為較小的部分,可避免遞歸沒完沒了,因為問題終將被分解成基線條件可以解決的小問題。

3、python遞歸函數(shù)

那么如何讓函數(shù)調(diào)用自身呢?這沒有看起來那么難懂。前面說過,每次調(diào)用函數(shù)時,都將為此創(chuàng)建一個新的命名空間。這意味著函數(shù)調(diào)用自身時,是兩個不同的函數(shù)[更準(zhǔn)確地說,是不同版本(即命名空間不同)的同一個函數(shù)]在交流。

經(jīng)典案例1,計算數(shù)字n的階乘。n的階乘為n × (n-1)× (n-2) ×… × 1,在數(shù)學(xué)領(lǐng)域的用途非常廣泛。

可使用循環(huán)。這種實現(xiàn)可行,而且直截了當(dāng)。

deffactorial(n):

    result = n

for i in range(1, n):

     result *= i

return result

下面來考慮如何使用函數(shù)來實現(xiàn)這個定義。理解這個定義后,實現(xiàn)起來其實非常簡單。 def factorial(n):

if n == 1:

    return 1

else:

    return n * factorial(n -1)

這是前述定義的直接實現(xiàn),只是別忘了函數(shù)調(diào)用factorial(n)和factorial(n–1)是不同的 實體。

經(jīng)典案例2、計算一個數(shù)冪,就像內(nèi)置函數(shù)pow和運算符**所做的那樣。要定義一個數(shù)字的整數(shù)次冪,有多種方式,但先來看一個簡單的定義:power(x, n)(x的n次冪)是將數(shù)字x自乘n - 1次的結(jié)果,即將n個x相乘的結(jié)果。換而言之,power(2, 3)是2自乘兩次的結(jié)果,即2 × 2 × 2 = 8。

這實現(xiàn)起來很容易。

def power(x, n):

    result = 1

  for i in range(n):

     result *= x

return result 這是一個非常簡單的小型函數(shù),但也可將定義修改成遞歸式的。

對于任何數(shù)字x,power(x, 0)都為1。n>0時,power(x, n)為power(x,n-1)與x的乘積。這種定義提供的結(jié)果與更簡單的迭代定義完全相同。理解定義是難的,而實現(xiàn)起來很容易。

 def power(x, n):

    if n == 0:

        return1

    else: 

       return x* power(x, n - 1)

4、為什么要使用遞歸函數(shù)

    大多數(shù)情況下,使用循環(huán)的效率可能更高。然而,在很多情況下,使用遞歸的可讀性更高,且有時要高得多,在你理解了函數(shù)的遞歸式定義時尤其如此。另外,雖然你完全能夠避免編寫遞歸函數(shù),但作為程序員,你必須能夠讀懂其他人編寫的遞歸算法和函數(shù)。

以上是“Python中如何實現(xiàn)遞歸函數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享文章:Python中如何實現(xiàn)遞歸函數(shù)
轉(zhuǎn)載源于:http://muchs.cn/article38/jcpopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、自適應(yīng)網(wǎng)站、微信小程序、定制網(wǎng)站網(wǎng)站建設(shè)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站