遞迴,Python 函式程式設計技巧之一
阿新 • • 發佈:2020-08-20
函式的遞迴
函式呼叫自身的程式設計技巧稱為遞迴。
函式內部可以呼叫其他函式,當然在函式內部也可以呼叫自己。
遞迴的特點
- 函式內部的程式碼是相同的,只是針對引數不同,處理的結果不同。
- 當引數滿足一個條件時,函式不再執行,這個非常重要,通常被稱為遞迴的出口,否則會出現死迴圈。
示例程式碼:
def sum_numbers(num): print(num) # 遞迴的出口很重要,否則會出現死迴圈 if num == 1: return # 自己呼叫自己 sum_numbers(num - 1) sum_numbers(3) # 3 # 2 # 1
遞迴分為兩個重要的階段:遞推+回溯。
- 遞推:函式不斷減少問題規模直至最終的終止條件。
- 回溯:拿到最終明確的值後,返回給上次呼叫進行處理,直至初始層。
由於無限的遞迴呼叫會佔用大量的記憶體,因此 python 對函式的遞迴呼叫的深度做了限制,當遞迴呼叫的次數達到限制時,就會丟擲異常。要避免出現這種情況,就必須讓遞迴呼叫在滿足某個特定條件下終止。
遞迴案例
需求:計算數字累加,接收一個 num 的整數引數,計算 1 + 2 + ... num 的結果。
def sum_numbers(num): if num == 1: return 1 # 假設 sum_numbers 能夠完成 num - 1 的累加 temp = sum_numbers(num - 1) # 函式內部的核心演算法就是兩個數字的相加 return num + temp print(sum_numbers(2)) # 3
遞迴是一個程式設計技巧,初次接觸遞迴會感覺有些吃力!
在處理不確定的迴圈條件時,使用遞迴格外有用,例如:遍歷整個檔案目錄的結構。