1. 程式人生 > 實用技巧 >遞迴,Python 函式程式設計技巧之一

遞迴,Python 函式程式設計技巧之一

函式的遞迴

函式呼叫自身的程式設計技巧稱為遞迴。

函式內部可以呼叫其他函式,當然在函式內部也可以呼叫自己。

遞迴的特點

  • 函式內部的程式碼是相同的,只是針對引數不同,處理的結果不同。
  • 當引數滿足一個條件時,函式不再執行,這個非常重要,通常被稱為遞迴的出口,否則會出現死迴圈。

示例程式碼:

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

遞迴是一個程式設計技巧,初次接觸遞迴會感覺有些吃力!

在處理不確定的迴圈條件時,使用遞迴格外有用,例如:遍歷整個檔案目錄的結構。