0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Python中什么情況必須使用遞歸

jf_78858299 ? 來源:人工智能知識分享 ? 作者:人工智能知識分享 ? 2023-02-21 14:25 ? 次閱讀

在前面的文章中,我們說到了可以使用循環(huán)語句來替代遞歸。但是,有時候必須使用遞歸,或者說使用遞歸才是更方便的解決方案。

考慮像下面這樣的一個任務(wù):計算一個嵌套的子列表結(jié)構(gòu)中所有數(shù)字的總和:

[1,[2,[3,4],5],6,[7,8]] # Arbitrarily nested sublists

簡單的循環(huán)語句在這里不起作用,因為這不是一個線性迭代。嵌套的循環(huán)語句也不夠用,因為子列表可能嵌套到任意的深度并且以任意的形式嵌套。相反,下面的代碼使用遞歸來對應(yīng)這種一般性的嵌套,可以順序地訪問子列表:

def sumtree(L):

tot = 0

for x in L:                                # For each item at this level

    if not isinstance(x,list):

        tot += x                           # Add numbers directly

    else:

        tot += sumtree(x)                  # Recur for sublists

return tot

L = [1,[2,[3,4],5],6,[7,8]] # Arbitrary nesting

print(sumtree(L)) # Prints 36

Pathological cases

print(sumtree([1,[2,[3,[4,[5]]]]])) # Prints 15 (right-heavy)

print(sumtree([[[[[1],2],3],4],5])) # Prints 15 (left-heavy)

盡管出于簡單性和高效率的目的,對于線性迭代通常應(yīng)該使用循環(huán)語句而不是遞歸,但我們會發(fā)現(xiàn)像上面示例一樣的必須使用遞歸的情況還是很多的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3566

    瀏覽量

    93540
  • 遞歸
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    9003
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84378
收藏 人收藏

    評論

    相關(guān)推薦

    stlinkv3minicubeprog檢測不到是什么情況

    我剛?cè)胧值膕tlinkv3mini連接電腦后可以被電腦端口識別到,驅(qū)動也已經(jīng)安裝好。但是cubeprog檢測不到是什么情況
    發(fā)表于 05-27 06:40

    labview遞歸使用你嘗試過嗎?

    關(guān)于遞歸,或許labview很少聽過或者使用,不過了解下,算是一種娛樂吧,labview是確實支持遞歸的關(guān)于遞歸一個可以調(diào)用自己的VI就
    發(fā)表于 01-05 15:07

    快速掌握Python遞歸函數(shù)與匿名函數(shù)調(diào)用

    函數(shù)是Python技術(shù)學(xué)習(xí)重要的一個環(huán)節(jié),深入掌握該階段的知識內(nèi)容,對于Python技術(shù)能力的提升非常有幫助,這里就針對遞歸函數(shù)與匿名函數(shù)兩種函數(shù)調(diào)用進(jìn)行系統(tǒng)的介紹分析?! ∫?
    發(fā)表于 07-19 16:22

    請問ucos運行態(tài)和就緒態(tài)是什么情況下轉(zhuǎn)化的?

    請問一下各位大神ucos 運行態(tài) 和 就緒態(tài)是什么情況下轉(zhuǎn)化的?????就是原子STM32開發(fā)指南中的狀態(tài) 轉(zhuǎn)換圖 中有運行態(tài)轉(zhuǎn)換到就緒態(tài)不知道是
    發(fā)表于 08-13 04:35

    什么情況選用PCI板卡,什么情況選用PXI?

    搭測控系統(tǒng)時,什么情況選用PCI板卡,什么情況選用PXI?
    發(fā)表于 03-31 20:59

    LabVIEW中使用遞歸算法

    factorial VI,1!和0!(特殊情況)被定義為結(jié)果是1。可重入VI需要強(qiáng)調(diào)的一點是,一個遞歸VI必須在內(nèi)存復(fù)制它的很多備份,這
    發(fā)表于 04-17 20:11

    CMOS集成電路,小信號大信號分別指的是什么情況

    CMOS集成電路,小信號大信號分別指的是什么情況?
    發(fā)表于 04-25 09:24

    數(shù)據(jù)在內(nèi)存的存儲右對齊是什么情況下使用?

    數(shù)據(jù)在內(nèi)存的存儲右對齊是什么情況下使用
    發(fā)表于 10-15 11:20

    什么情況下要進(jìn)行電能質(zhì)量檢測?

    什么情況下要進(jìn)行電能質(zhì)量檢測?
    發(fā)表于 09-08 14:20 ?665次閱讀

    什么情況下選用工業(yè)主板

    雖然工業(yè)主板和普通主板差異比較多,但是某些情況下工業(yè)主板用于商業(yè)環(huán)境也是可以的,但是實用性不是很好。什么情況下選用工業(yè)主板呢?
    的頭像 發(fā)表于 02-14 10:34 ?794次閱讀
    <b class='flag-5'>什么情況</b>下選用工業(yè)主板

    Python支持遞歸函數(shù)

    Python支持遞歸函數(shù)——即直接或間接地調(diào)用自身以進(jìn)行循環(huán)的函數(shù)。遞歸是頗為高級的話題,并且它在Python相對少見。然而,它是一項應(yīng)該
    的頭像 發(fā)表于 02-21 14:28 ?615次閱讀

    什么是Python遞歸函數(shù)

    遞歸函數(shù)必須有終止條件。編程,函數(shù)的調(diào)用要占用名叫棧(stack)的內(nèi)存空間。調(diào)用函數(shù)時,程序會將相關(guān)的數(shù)據(jù)存儲到計算機(jī)的棧里。
    的頭像 發(fā)表于 02-23 10:25 ?1770次閱讀

    IGBT模塊損壞時,什么情況導(dǎo)致短路?什么情況導(dǎo)致開路?

    IGBT模塊損壞時,什么情況導(dǎo)致短路?什么情況導(dǎo)致開路?? IGBT模塊是一種功率模塊,用于高功率電子設(shè)備控制。當(dāng)IGBT模塊使用過程遭受損壞時,可能會出現(xiàn)短路或開路的問題。這兩種
    的頭像 發(fā)表于 10-19 17:08 ?4333次閱讀

    Python 什么情況下才進(jìn)行重試

    如何寫得優(yōu)雅、易用,是我們要考慮的問題。 這里要給大家介紹的是一個第三方庫 - Tenacity (標(biāo)題中的重試機(jī)制并并不準(zhǔn)確,它不是 Python 的內(nèi)置模塊,因此并不能稱之為機(jī)制),它實現(xiàn)了幾乎我們可以使用到的所有重試場景,比如:
    的頭像 發(fā)表于 10-21 11:18 ?325次閱讀

    Python遞歸的經(jīng)典案例

    當(dāng)我們碰到諸如需要求階乘或斐波那契數(shù)列的問題時,使用普通的循環(huán)往往比較麻煩,但如果我們使用遞歸時,會簡單許多,起到事半功倍的效果。這篇文章主要和大家分享一些和遞歸有關(guān)的經(jīng)典案例,結(jié)合一些資料談一下個人的理解,也借此加深自己對遞歸
    的頭像 發(fā)表于 08-05 15:57 ?263次閱讀