python之理解 遞迴

2022-07-30 05:27:16 字數 2262 閱讀 5368

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

這是從林海峰部落格裡面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

'說:我知道,書放在書架最下面

'.format(student)

print('

同學,你知道書在**?

'.format(student))

print('

回答道:我不知道,但念你慧眼識豬,你等著,我幫你問問

'.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程式設計之理解物件

1 python中的函式和類均是物件,體現在以下幾方面 1 都可以賦值給乙個變數 2 可以新增到集合物件中 3 可以作為引數傳遞給函式 4 可以當作函式的返回值 如果乙個函式沒有return語句,則預設返回none 2 type,class,object之間的關係 我們在python中定義的所有cl...

資料結構學習之理解遞迴執行順序

從下面 的輸出結果來理解遞迴執行的順序 function some i console.log i return i i 5 i some i 執行結果 遞迴函式執行到遞迴的時候則先不往下執行,而是開始新一輪的遍歷,直到遞迴退出的條件成立,此時從本次開始依次往回執行剛才剩下的未執行的函式。例子對比 ...

高效面試之理解編碼

一.補碼 1.為什麼要使用原碼,反碼,補碼 1 負數二進位制怎麼表示?答 在原碼中,高位為1就表示負數 2 計算機如何實現減法?1 1 答 對於計算機,邏輯運算應該設計的簡單,1 1可以表示為1 1 故沒有減法,用加法實現減法。1 1 1 1 00000001 原 10000001 原 100000...