Python小白學習之路(十三)—【遞迴呼叫】
阿新 • • 發佈:2018-11-07
一、遞迴呼叫定義
在函式內部,可以呼叫其他函式。
如果在呼叫一個函式的過程中直接或間接呼叫自身本身,則稱為遞迴呼叫
從某種意義上來說,遞迴呼叫可以實現無限迴圈
二、遞迴呼叫的特性
- 必須有一個明確的結束條件
- 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
- 遞迴效率不高,遞迴層次過多會導致棧溢位
- 在計算機中,函式呼叫是通過棧(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)