chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

馬哥Linux運維 ? 來源:博客園小小程序員ol ? 2024-08-05 15:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

一、遞歸的簡介

1、遞歸的百度百科定義

程序調(diào)用自身的編程技巧稱為遞歸( recursion)。

遞歸做為一種算法在程序設(shè)計語言中廣泛應(yīng)用。 一個過程或函數(shù)在其定義或說明中有直接或
間接調(diào)用自身的一種方法,它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大地減少了程序的代碼量。

遞歸的能力在于用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進(jìn)
段和遞歸返回段。當(dāng)邊界條件不滿足時,遞歸前進(jìn);當(dāng)邊界條件滿足時,遞歸返回。

2、遞歸的通俗理解

遞歸就是在函數(shù)內(nèi)部調(diào)用自己的函數(shù)被稱之為遞歸。

3、幾個關(guān)于遞歸通俗的比喻

1.我們使用的詞典,本身就是遞歸,為了解釋一個詞,需要使用更多的詞。當(dāng)你查一個詞,發(fā)現(xiàn)這個詞的解釋中某個詞仍然不懂,于是你開始查這第二個詞,可惜,第二個詞里仍然有不懂的詞,于是查第三個詞,這樣查下去,直到有一個詞的解釋是你完全能看懂的,那么遞歸走到了盡頭,然后你開始后退,逐個明白之前查過的每一個詞,最終,你明白了最開始那個詞的意思。

2.一個小朋友坐在第10排,他的作業(yè)本被小組長扔到了第1排,小朋友要拿回他的作業(yè)本,可以怎么辦?他可以拍拍第9排小朋友,說:“幫我拿第1排的本子”,而第9排的小朋友可以拍拍第8排小朋友,說:“幫我拿第1排的本子”...如此下去,消息終于傳到了第1排小朋友那里,于是他把本子遞給第2排,第2排又遞給第3排...終于,本子到手啦!這就是遞歸,拍拍小朋友的背可以類比函數(shù)調(diào)用,而小朋友們都記得要傳消息、送本子,是因為他們有記憶力,這可以類比棧。

3.一個洋蔥是一個帶著一層洋蔥皮的洋蔥。

4、最簡單的遞歸的實例

# 將 10不斷除以2,直至商為0,輸出這個過程中每次得到的商的值。
def recursion(n):
    v = n//2 # 地板除,保留整數(shù)
    print(v) # 每次求商,輸出商的值
    if v==0:
        ''' 當(dāng)商為0時,停止,返回Done'''
        return 'Done'
    v = recursion(v) # 遞歸調(diào)用,函數(shù)內(nèi)自己調(diào)用自己
recursion(10) # 函數(shù)調(diào)用

輸出結(jié)果:

5
2
1
0

5、遞歸的特點

通過以上的介紹,我們大致可以總結(jié)出遞歸的以下幾個特點:

1、必須有一個明確的結(jié)束條件
2、每次進(jìn)入更深一層遞歸時,問題規(guī)模(計算量)相比上次遞歸都應(yīng)有所減少
3、遞歸效率不高,遞歸層次過多會導(dǎo)致棧溢出(在計算機中,函數(shù)調(diào)用是通過棧(stack)這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的,每當(dāng)進(jìn)入一個函數(shù)調(diào)用,棧就會加一層棧幀,每當(dāng)函數(shù)返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調(diào)用的次數(shù)過多,會導(dǎo)致棧溢出)

關(guān)于遞歸還有兩個名詞,可以概括遞歸實現(xiàn)的過程

遞推:像上邊遞歸實現(xiàn)所拆解,遞歸每一次都是基于上一次進(jìn)行下一次的執(zhí)行,這叫遞推

回溯:則是在遇到終止條件,則從最后往回返一級一級的把值返回來,這叫回溯

二、遞歸經(jīng)典案例

1、遞歸求階乘

實例如下:

'''
學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書!
'''
# 1!+2!+3!+4!+5!+...+n!
def factorial(n):
    ''' n表示要求的數(shù)的階乘 '''
    if n==1:
        return n # 階乘為1的時候,結(jié)果為1,返回結(jié)果并退出
    n = n*factorial(n-1) # n! = n*(n-1)!
    return n  # 返回結(jié)果并退出
res = factorial(5) #調(diào)用函數(shù),并將返回的結(jié)果賦給res
print(res) # 打印結(jié)果

2、遞歸推斐波那契數(shù)列

實例如下:

# 1,1,2,3,5,8,13,21,34,55,試判斷數(shù)列第十五個數(shù)是哪個?
def fabonacci(n):
    ''' n為斐波那契數(shù)列 '''
    if n <= 2:
        ''' 數(shù)列前兩個數(shù)都是1 '''
        v = 1
        return v # 返回結(jié)果,并結(jié)束函數(shù)
    v = fabonacci(n-1)+fabonacci(n-2) # 由數(shù)據(jù)的規(guī)律可知,第三個數(shù)的結(jié)果都是前兩個數(shù)之和,所以進(jìn)行遞歸疊加
    return v  # 返回結(jié)果,并結(jié)束函數(shù)
print(fabonacci(15)) # 610    調(diào)用函數(shù)并打印結(jié)果

3、二分法找有序列表指定值

實例如下:

data = [1,3,6,13,56,123,345,1024,3223,6688]
def dichotomy(min,max,d,n):
    '''
    min表示有序列表頭部索引
    max表示有序列表尾部索引
    d表示有序列表
    n表示需要尋找的元素
    '''
    mid = (min+max)//2
    if mid==0:
        return 'None'
    elif d[mid]n:
        print('向左側(cè)找!')
        return dichotomy(min,mid,d,n)
    else:
        print('找到了%s'%d[mid])
        return 
res = dichotomy(0,len(data),data,222)
print(res)

鏈接:https://www.cnblogs.com/python1111/p/16669878.html

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

    關(guān)注

    117

    文章

    3826

    瀏覽量

    82855
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4379

    瀏覽量

    64734
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4826

    瀏覽量

    86609

原文標(biāo)題:Python遞歸的幾個經(jīng)典案例

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C語言遞歸的運行順序

    今天分享一下C語言課會講到了一道非常經(jīng)典遞歸題目!
    發(fā)表于 09-07 11:43 ?1057次閱讀

    《C Primer Plus》讀書筆記——遞歸

    本帖最后由 cugwyman 于 2017-2-5 20:14 編輯 遞歸的原理一個函數(shù)調(diào)用其本身,此調(diào)用過程為遞歸(recursion)。遞歸的使用舉個栗子:/*用來測試UpAndDown
    發(fā)表于 02-05 20:06

    快速掌握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

    基于 ‘LabVIEW ’ 的 ‘遞歸調(diào)用’ 應(yīng)用實例

    labview也可實現(xiàn)像其他文本語言(C,C+,Java,Python等)的遞歸調(diào)用:即通過調(diào)用自己來實現(xiàn)反向運算本vi是計算平方和公式;即F(n)=n^2+(n-1)^2+...+2^2+1。
    發(fā)表于 08-20 09:48

    python的12個經(jīng)典實例程序詳細(xì)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是python的12個經(jīng)典實例程序詳細(xì)說明。
    發(fā)表于 09-11 16:55 ?34次下載
    <b class='flag-5'>python</b>的12個<b class='flag-5'>經(jīng)典</b>實例程序詳細(xì)說明

    Python的入門經(jīng)典實例免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python的入門經(jīng)典實例免費下載。
    發(fā)表于 01-18 16:47 ?40次下載
    <b class='flag-5'>Python</b>的入門<b class='flag-5'>經(jīng)典</b>實例免費下載

    python經(jīng)典實例相關(guān)講解

    本文檔的主要內(nèi)容詳細(xì)介紹的是python經(jīng)典實例相關(guān)講解。
    發(fā)表于 03-02 15:33 ?9次下載

    Python程序設(shè)計的經(jīng)典復(fù)習(xí)題免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Python程序設(shè)計的經(jīng)典復(fù)習(xí)題免費下載。
    發(fā)表于 03-25 13:48 ?9次下載

    python經(jīng)典實例詳解

    python經(jīng)典實例詳解說明。
    發(fā)表于 04-26 10:14 ?32次下載

    Python經(jīng)典入門教程

    Python經(jīng)典入門教程資料分享。
    發(fā)表于 06-01 10:25 ?121次下載

    Python學(xué)習(xí)科學(xué)編程

    Python學(xué)習(xí)科學(xué)編程,Python經(jīng)典教材。
    發(fā)表于 03-09 15:00 ?0次下載

    遞歸實現(xiàn)依次打印出數(shù)字中的每一位

    今天來分析一道非常經(jīng)典遞歸題目:實現(xiàn)依次打印出數(shù)字中的每一位。
    的頭像 發(fā)表于 05-05 15:17 ?1351次閱讀

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

    在前面的文章中,我們說到了可以使用循環(huán)語句來替代遞歸。但是,有時候必須使用遞歸,或者說使用遞歸才是更方便的解決方案。 考慮像下面這樣的一個任務(wù):計算一個嵌套的子列表結(jié)構(gòu)中所有數(shù)字的總和:
    的頭像 發(fā)表于 02-21 14:25 ?777次閱讀

    Python支持遞歸函數(shù)

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

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

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