国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一張圖學(xué)會python遞歸函數(shù)

這篇具有很好參考價值的文章主要介紹了一張圖學(xué)會python遞歸函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

遞歸函數(shù)屬于那種“難者不會,會者不難”的事情,回想自己大學(xué)時學(xué)習(xí)遞歸函數(shù)的經(jīng)歷,簡直是痛不欲生,代碼里沒有一行是看不懂的,但就是理解不了它是怎樣運行的。 等到自己悟通了原理,就又會覺得這東西太簡單了,不明白自己當(dāng)初為何想不清楚。

對于遞歸函數(shù),你就把握以下幾點:

  1. 在函數(shù)內(nèi)調(diào)用函數(shù)自身,和調(diào)用其他函數(shù)沒有區(qū)別,反正都是函數(shù)
  2. 遞歸函數(shù)存在條件,在這個條件下必須return,否則遞歸就成了死循環(huán)
  3. 最后一條,也是容易出錯的地方,函數(shù)多次遞歸調(diào)用,形成了一個多層次的調(diào)用關(guān)系,函數(shù)return 時,是從最底層開始逐層return的,return只是結(jié)束當(dāng)前所在的函數(shù)

第3條是最難理解的部分,原因在于遞歸函數(shù)的調(diào)用是一個動態(tài)的過程,而我們看到的代碼是靜態(tài)的,對于剛剛接觸編程的人,還不能夠在閱讀完代碼后,僅憑對代碼的邏輯的理解在頭腦中模擬出程序的執(zhí)行過程。

所以,我決定畫一張圖來解釋遞歸函數(shù)的調(diào)用過程,我先寫一個計算階乘的遞歸函數(shù)

def func(n):
    if n == 1:
        return 1
    return n*func(n-1)

print(func(5))

下圖是執(zhí)行func(5) 的遞歸調(diào)用過程
一張圖學(xué)會python遞歸函數(shù)
解釋一下這張圖里各個線條的含義:

  1. 紫色的箭頭表示函數(shù)調(diào)用
  2. 橙色的箭頭表示函數(shù)執(zhí)行return 語句
  3. 5次func函數(shù)調(diào)用,前4次我用了淺藍(lán)色,最后一次調(diào)用是橙色

都是函數(shù)調(diào)用,為什么最后一次用橙色呢?最后一次func調(diào)用,和前面4次是不同的,最后一次調(diào)用終止了整個遞歸調(diào)用,從它開始,遞歸調(diào)用進(jìn)入到return階段。

右側(cè)的注釋說明,很好的描述了函數(shù)的執(zhí)行過程,想要計算出5的階乘,先要計算4的階乘,然后5乘以4的階乘就是最終結(jié)果,計算4的階乘需執(zhí)行func(4)。計算4的階乘時,先要計算3的階乘,然后4乘以3的階乘最為func(4) 的結(jié)果等和5相乘作為func(5) 的結(jié)果;計算3的階乘呢?和前面的思路一致。

等到計算1的階乘時,思路就變了,你必須直接return 1的階乘,不能再調(diào)用func函數(shù)了,因為1的階乘就是1,不能轉(zhuǎn)換成1乘以某個數(shù)的階乘。

你不可以將這段程序理解為func函數(shù)被調(diào)用了5次,有5個返回結(jié)果。盡管你的描述沒有錯誤,但從執(zhí)行程序的視角來看,作為用戶,你只調(diào)用了1次func函數(shù),那就是func(5), 剩下的那4次,是函數(shù)func自己內(nèi)部進(jìn)行的處理,你只得到了一個返回結(jié)果,它就是120。

換一個角度來看

  1. func(1) 的返回結(jié)果是1,給了func(2)
  2. func(2) 計算2func(1) = 21 =2 , 將2作為結(jié)果返回給func(3)
  3. func(3) 計算3func(2) = 32 =6,將6返回給func(4)
  4. func(4) 計算4func(3) = 46=24, 將24返回給func(5)
  5. func(5) 計算5func(4) = 524=120,你最終得到的就是120

函數(shù)調(diào)用是一個過程,理解遞歸的關(guān)鍵是理解遞歸過程中的調(diào)用鏈?zhǔn)侨绾涡纬傻?,調(diào)用鏈的最后一個環(huán)節(jié)會有一個返回值,之后整個調(diào)用鏈條里的節(jié)點,都根據(jù)自己下一個節(jié)點的返回值計算自己的返回值并返回給上一個節(jié)點。最頂層的節(jié)點是你調(diào)用的,你得到的就是最終的結(jié)果。文章來源地址http://www.zghlxwxcb.cn/news/detail-408897.html

到了這里,關(guān)于一張圖學(xué)會python遞歸函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 一張圖搞懂微服務(wù)架構(gòu)設(shè)計

    一張圖搞懂微服務(wù)架構(gòu)設(shè)計

    當(dāng)前,微服務(wù)架構(gòu)在很多公司都已經(jīng)落地實施了,下面用一張圖簡要概述下微服務(wù)架構(gòu)設(shè)計中常用組件。不能說已經(jīng)使用微服務(wù)好幾年了,結(jié)果對微服務(wù)架構(gòu)沒有一個整體的認(rèn)知,一個只懂搬磚的程序員不是一個好碼農(nóng)! 在上圖中可以看到,Nginx作為整個架構(gòu)的流量入口,可以

    2023年04月17日
    瀏覽(16)
  • GLES學(xué)習(xí)筆記---立方體貼圖(一張圖)

    GLES學(xué)習(xí)筆記---立方體貼圖(一張圖)

    立方體貼圖 如上圖是一張2D紋理,我們需要將這個2D紋理貼到立方體上,立方體有6個面,所以上面的2D圖分成了6個面,共有14個紋理坐標(biāo) 上邊的立方體一共8個頂點坐標(biāo),范圍是[-1, 1]; 我們要做的是將紋理圖貼到這6個面上面 我們繪制的時候使用了VBO、VAO、EBO、 indices里面是繪

    2024年01月19日
    瀏覽(31)
  • uniapp:手寫簽名,多張圖合成一張圖

    uniapp:手寫簽名,多張圖合成一張圖

    要實現(xiàn)的內(nèi)容 :手寫簽名,協(xié)議內(nèi)容。點擊提交后:生成1張圖片,有協(xié)議內(nèi)容和簽署日期和簽署人。 實現(xiàn)的效果圖如下: 1、簽名頁面

    2024年02月15日
    瀏覽(61)
  • 一張圖快速了解 Istio 的 EnvoyFilter

    一張圖快速了解 Istio 的 EnvoyFilter

    EnvoyFilter 提供了一種機(jī)制來定制 Istio Pilot 生成的 Envoy 配置。使用 EnvoyFilter 修改某些字段的值,添加特定的過濾器,甚至添加全新的偵聽器、集群等等。 這個功能必須謹(jǐn)慎使用,因為不正確的配置可能會破壞整個網(wǎng)格的穩(wěn)定性。與其他 Istio 網(wǎng)絡(luò)對象不同,EnvoyFilter 是疊加應(yīng)

    2024年02月08日
    瀏覽(31)
  • 一張圖讀懂TuGraph Analytics開源技術(shù)架構(gòu)

    一張圖讀懂TuGraph Analytics開源技術(shù)架構(gòu)

    TuGraph Analytics(內(nèi)部項目名GeaFlow) 是螞蟻集團(tuán)開源的分布式實時圖計算引擎,即流式圖計算。通過SQL+GQL融合分析語言對表模型和圖模型進(jìn)行統(tǒng)一處理,實現(xiàn)了流、批、圖一體化計算,并支持了Exactly Once語義、高可用以及一站式圖研發(fā)平臺等生產(chǎn)化能力。 開源項目代碼目前托

    2024年02月12日
    瀏覽(25)
  • 網(wǎng)絡(luò)安全——一張圖看懂HTTPS建立過程

    網(wǎng)絡(luò)安全——一張圖看懂HTTPS建立過程

    · 準(zhǔn)備工作(對應(yīng)圖中prepare1234) · 發(fā)起鏈接 · 最后 關(guān)于網(wǎng)絡(luò)安全加密的介紹可以看之前文章: (數(shù)據(jù)的加密與簽名) HTTPS建立過程相當(dāng)復(fù)雜,下圖為示意圖,可以有整體認(rèn)識,一般我們編程知道這些已足夠。 如果你想仿照HTTPS實現(xiàn)類似加密,可以閱讀下具體過程,作為參

    2024年04月12日
    瀏覽(26)
  • Unity 如何通過2D Sprite切割一張圖為多張

    Unity 如何通過2D Sprite切割一張圖為多張

    1、理解 在一些2D游戲開發(fā)中,我們常常使用2D Sprite把一張大圖切割成多個小圖使用。 這樣做有不少好處,首先,通過精準(zhǔn)使用小圖,能夠一定程度上節(jié)省內(nèi)存,提高渲染性能。 其次把同類的小圖做成一張大圖在切割使用會更方便我們進(jìn)行對資源的管理。 再者,在2D游戲中通

    2024年04月26日
    瀏覽(30)
  • 一張圖讓你理解 IaaS、SaaS 和 PaaS 的區(qū)別?

    一張圖讓你理解 IaaS、SaaS 和 PaaS 的區(qū)別?

    大家看下面這張圖,我將從概念,服務(wù),公司和發(fā)展,4 個方面,給大家通俗的解釋下,什么是:SaaS,PaaS 和 IaaS:? SaaS,Paas,IaaS 的區(qū)別 互聯(lián)網(wǎng)發(fā)展到今天,人類已經(jīng)無法離開互聯(lián)網(wǎng)而存在,我們?nèi)粘玫降奈⑿?,抖音,淘寶等,都是面向個人用戶的,打開就可以立即使

    2023年04月21日
    瀏覽(34)
  • 【uniapp小程序-生成二維碼+多個圖片文字合并一張圖】

    下載uqrcodejs: https://uqrcode.cn/doc/guide/getting-started.html

    2024年02月03日
    瀏覽(78)
  • vue3結(jié)合openlayers,geoserver實現(xiàn)GIS一張圖(WebGIS)

    vue3結(jié)合openlayers,geoserver實現(xiàn)GIS一張圖(WebGIS)

    ? ? ? ? 不知不覺一年又要過去了,接觸開發(fā)也就是這幾個月的事情,感覺時間過的真快,今天就是除夕了,祝各位新年快樂呀,話說回來,其實在接觸學(xué)習(xí)WebGIS的過程中還是蠻迷茫的,自己雖然是地信的學(xué)生,對于地理方面還有有一些自己的理解,但平時專業(yè)課學(xué)習(xí)的就是

    2024年02月19日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包