Functional Programming 中的遞迴

Programming Paradigm 概念

Eleanor Thomas

Senior Data Analytics Engineer

什麼是遞迴?

  • 遞迴函式:會呼叫自己的函式
  • 必須有終止條件(base case)
  • 還需要以修改後輸入呼叫自身
0 | def my_recursive_function(input_value):
1 |     # base case
2 |     if base_case_condition:
3 |        return base_case_output_value
4 |     # recursive call
5 |     else:
6 |        return my_recursive_function(modified_input_value) + some_modification
Programming Paradigm 概念

為什麼用遞迴?

  • 有些問題用遞迴定義更直覺
  • 費波那契數列:
    • 0, 1, ...
    • 0, 1, 1, ...
    • 0, 1, 1, 2, ...
    • 0, 1, 1, 2, 3, ...
Programming Paradigm 概念

更多遞迴範例

檔案系統

  • 搜尋檔案系統
Programming Paradigm 概念

更多遞迴範例

檔案系統;排序方法

  • 搜尋檔案系統
  • 某些排序演算法,如 Merge Sort
Programming Paradigm 概念

更多遞迴範例

檔案系統;排序方法;資料結構

  • 搜尋檔案系統
  • 某些排序演算法,如 Merge Sort
  • 各種資料結構以遞迴方式定義
Programming Paradigm 概念

遞迴 vs. 反覆

  • 每個遞迴函式都能改寫成反覆法
  • 反覆法用迴圈取代遞迴呼叫
def iterative_factorial(n):
    result = 1
    for i in range(1, n + 1):
        result = result * i
    return result
Programming Paradigm 概念

一起來練習吧!

Programming Paradigm 概念

Preparing Video For Download...