首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Python 解決母牛繁殖問題:遞歸與迭代優化

     編輯:程式設計綜合問答

問題建模

  • 第 1 年初:1 頭母牛(成熟)
  • 第 2 年初:2 頭(原牛 + 新生)
  • 第 3 年初:3 頭
  • 第 4 年初:4 頭(原牛第 4 年生,第 1 年生的牛尚未成熟)
  • 第 n 年 (n≥5):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)

迭代 O(1) 空間實現(推薦)


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)場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved