f(n) = f(n-1) + f(n-3)from functools import lru_cache
@lru_cache(maxsize=None)
def cows_recursive(n: int) -> int:
if n <= 0: return 0
if n == 1: return 1
if n == 2: return 2
if n == 3: return 3
if n == 4: return 4
return cows_recursive(n - 1) + cows_recursive(n - 3)
def cows_iterative(n: int) -> int:
if n <= 0: return 0
if n == 1: return 1
if n == 2: return 2
if n == 3: return 3
if n == 4: return 4
a, b, c, d = 1, 2, 3, 4 # f(n-4), f(n-3), f(n-2), f(n-1)
for _ in range(5, n + 1):
a, b, c, d = b, c, d, d + b # f(n) = f(n-1) + f(n-3)
return d
| 方法 | 時間 | 空間 | 備註 |
|---|---|---|---|
| 朴素遞歸 | O(3^n) | O(n) | 重複計算極多 |
| 備忘錄遞歸 | O(n) | O(n) | Python 裝飾器極簡 |
| 迭代滾動數組 | O(n) | O(1) | 生產環境首選 |
母牛問題本質是線性遞推 f(n)=f(n-1)+f(n-3)。Python 使用 lru_cache 快速實現備忘錄遞歸,或四變量滾動迭代達到 O(1) 空間,均可輕鬆應對大 N(如 10^6)場景。