python之理解——遞迴

來源:互聯網
上載者:User

標籤:col   closed   bsp   天下   思考   好的   初識   執行   size   

古之欲明明德於天下者,先治其國;欲治其國者,先齊其家;欲齊其家者,先修其身;欲修其身者,先正其心;欲正其心者,先誠其意;欲誠其意者,先致其知,致知在格物。物格而後知至,知至而後意誠,意誠而後心正,心正而後身修,身修而後家齊,家齊而後國治,國治而後天下平。

這是從林海峰部落格裡面copy的。很好的解釋了,python函數的遞迴。

那什麼是遞迴?

在函數內部,可以調用其他函數。如果在調用一個函數的過程中直接或間接調用自身本身

def digui(n):    print(n)    digui(n)digui(10)
遞迴的樣子

這個函數是無休止進行下去的,如何停止?

所以我們需要利用函數的傳回值——return

簡單舉例遞迴

def fan(n):    # print(n)    if int(n / 2) == 0:        return n    res=fan(int(n / 2))    return resv=fan(5)print(v)
初識遞迴
1.fan(5)——調用函數fan,n=5
2. print(n)——列印5,表示n=5
3.if int(n / 2) == 0:——判斷5/2是否為0,不滿足
4. res=fan(int(n / 2))——執行res,fan(2)*取整*
5.fan(2)——執行fan(2)
6.print(2)——列印2,表示n=2
7.if int(n / 2) == 0:——判斷2/2是否為0,不滿足
8.res=fan(int(n / 2))——執行res,fan(1)
9.fan(1)——執行fan(1)
10.print(1)——列印1,表示n=1
11.if int(n / 2) == 0:——判斷1/2是否為0,*取整*,滿足
12.return n——返回n,n現在等於1
13.思考:n等於1返回的曆程
是直接返回到fan(5)?還是先返回到fan(2),fan(2)得到一個傳回值,fan(2)再返回到fan(5)

用更簡單的例子來說就是:

假如我是一個班級的學生,我想在我的班找一本書。

我問同學A:“同學你知道書在什麼地方?”

A回答:“我不知道,我幫你問問B”

A問B:“同學你知道書在什麼地方?”

B回答A:“我不知道,我幫你問問C”

B問C:”同學你知道書在什麼地方?”

C回答B:“書在書架的最下面”

B現在知道書在什麼地方,B就告訴A,然後A就告訴我。

students_list=[‘A‘,‘B‘,‘C‘,‘D‘]def fund_book(students_list):    if len(students_list)==0:        return ‘沒有人知道書在什麼地方‘    student=students_list.pop(0)    if student==‘C‘:        return‘{0}說:我知道,書放在書架最下面‘.format(student)    print(‘同學{0},你知道書在哪裡?‘.format(student))    print(‘{0}回答道:我不知道,但念你慧眼識豬,你等著,我幫你問問{1}‘.format(student,students_list))    res=fund_book(students_list)    print(‘%s問的結果是: %res‘ % (student, res))    return resv=fund_book(students_list)print(v)
完美理解遞迴總結遞迴特性:

1. 必須有一個明確的結束條件

2. 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少

3. 遞迴效率不高,遞迴層次過多會導致棧溢出(在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴調用的次數過多,會導致棧溢出)

 

python之理解——遞迴

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.