1. 程式人生 > >Python小白學習之路(十三)—【遞迴呼叫】

Python小白學習之路(十三)—【遞迴呼叫】

一、遞迴呼叫定義

在函式內部,可以呼叫其他函式。

如果在呼叫一個函式的過程中直接或間接呼叫自身本身,則稱為遞迴呼叫

從某種意義上來說,遞迴呼叫可以實現無限迴圈


二、遞迴呼叫的特性

  • 必須有一個明確的結束條件
  • 每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
  • 遞迴效率不高,遞迴層次過多會導致棧溢位
    • 在計算機中,函式呼叫是通過棧(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)