Python小白學習之路(十三)—【遞歸調用】
阿新 • • 發佈:2018-11-07
結束 style mon port 特性 小白 好的 就是 實例
一、遞歸調用定義
在函數內部,可以調用其他函數。
如果在調用一個函數的過程中直接或間接調用自身本身,則稱為遞歸調用
從某種意義上來說,遞歸調用可以實現無限循環
二、遞歸調用的特性
- 必須有一個明確的結束條件
- 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
- 遞歸效率不高,遞歸層次過多會導致棧溢出
- 在計算機中,函數調用是通過棧(stack)這種數據結構實現的
- 每當進入一個函數調用,棧就會加一層棧幀
- 每當函數返回,棧就會減一層棧幀
- 由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出
三、遞歸實例
遞歸調用就是一個問路的過程。通過一個程序以及其執行過程來更好的理解遞歸調用
1 import time 2 person_list = [‘Rachel‘, ‘Monica‘, ‘Ross‘, ‘Joey‘] 3 def ask_way(person_list): 4 print(‘-‘*60) 5 if len(person_list) == 0: 6 return ‘沒人知道‘ 7 person = person_list.pop(0) 8 if person == ‘Ross‘: 9 return ‘%s說:我知道,流水人家就在小橋旁‘ %person 10 print(‘hi 親愛的%s,知道流水人家在哪裏嗎?‘ %person) 11 print(‘%s回答道:抱歉,我不知道,我幫你問問%s...‘ %(person,person_list)) 12 time.sleep(3) 13 res = ask_way(person_list) 14 print(‘%s問的結果是: %res‘ %(person,res)) 15 return res 16 res = ask_way(person_list) 17 print(res)
Python小白學習之路(十三)—【遞歸調用】