1、什麼叫遞迴函式
Python中,在函式內部,可以呼叫其他函式。如果一個函式在內部呼叫自身本身,這個函式就是遞迴函式。
2、遞迴的應用場景
遞迴是一種程式設計思想,應用場景:
- 在我們日常開發中,如果要遍歷一個資料夾下面所有的檔案,通常會使用遞迴來實現;
- 在後續的演算法課程中,很多演算法都離不開遞迴,例如:快速排序。
3、遞迴的特點
- 1、遞迴函式必須有一個明確的結束條件。
- 2、每進入更深一層的遞迴時,問題規模現對於上一層遞迴都會減少。
- 3、相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸入就是作為後一次的輸入)
- 4、遞迴效率不高,遞迴層次過多會導致棧溢位。
總結編寫遞迴函式最要注意的兩點:
- 函式內部自己呼叫自己。
- 必須有出口。
4、應用:3以內數字累加和
實現程式碼如下:
"""
# 需求分析:3以內數字累加和 3 + 2 + 1 = 6
# 6 = 3 + 2以內數字累加和
# 2以內數字累加和 = 2 + 1以內數字累加和
# 1以內數字累加和 = 1 # 出口
"""
def sum_numbers(num):
# 1.如果是1,直接返回1 -- 出口
# 如果沒有出口,報錯:超出最大遞迴深度
# RecursionError: maximum recursion depth exceeded
if num == 1:
return 1
# 2.如果不是1,重複執行累加並返回結果
# 前數字 + 當前數字-1的累加和
return num + sum_numbers(num-1)
sum_result = sum_numbers(3)
# 輸出結果為6
print(sum_result)
遞迴函式執行流程圖:
5、應用:階乘
def factorial(n):
'''
該函式用來求任意數的階乘
引數:
n 要求階乘的數字
'''
# 基線條件 判斷n是否為1,如果為1則此時不能再繼續遞迴
if n == 1 :
# 1的階乘就是1,直接返回1
return 1
# 遞迴條件
return n * factorial(n-1)
print(factorial(10))
6、總結
- 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入一個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)
- 理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。
- 遞迴編寫起來比較難,但優點是定義簡單,邏輯清晰。