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

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

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

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

jf_78858299 ? 來(lái)源:人工智能知識(shí)分享 ? 作者:人工智能知識(shí)分享 ? 2023-02-21 14:25 ? 次閱讀

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

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

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

簡(jiǎn)單的循環(huán)語(yǔ)句在這里不起作用,因?yàn)檫@不是一個(gè)線性迭代。嵌套的循環(huán)語(yǔ)句也不夠用,因?yàn)樽恿斜砜赡芮短椎饺我獾纳疃炔⑶乙匀我獾男问角短?。相反,下面的代碼使用遞歸來(lái)對(duì)應(yīng)這種一般性的嵌套,可以順序地訪問(wèn)子列表:

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)

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

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

    關(guān)注

    88

    文章

    3544

    瀏覽量

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

    關(guān)注

    0

    文章

    28

    瀏覽量

    8999
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4759

    瀏覽量

    84295
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stlinkv3minicubeprog檢測(cè)不到是什么情況?

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

    labview遞歸使用你嘗試過(guò)嗎?

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

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

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

    請(qǐng)問(wèn)ucos運(yùn)行態(tài)和就緒態(tài)是什么情況下轉(zhuǎn)化的?

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

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

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

    LabVIEW中使用遞歸算法

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

    CMOS集成電路,小信號(hào)大信號(hào)分別指的是什么情況?

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

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

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

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

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

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

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

    Python支持遞歸函數(shù)

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

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

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

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

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

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

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

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

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