From 9d2ab0852459b957b43fa0684af603d5a9531ed0 Mon Sep 17 00:00:00 2001 From: Paracy <1843806917@qq.com> Date: Mon, 4 Aug 2025 21:45:56 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E9=80=92=E5=BD=92=E8=AE=A1=E7=AE=97=20-=20?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=82=B9=EF=BC=9A=E5=BF=98=E8=AE=B0=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E7=BB=93=E6=9E=9C=E5=88=B0memo=E5=AD=97=E5=85=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/fibonacci.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 python/fibonacci.py diff --git a/python/fibonacci.py b/python/fibonacci.py new file mode 100644 index 0000000..28ad76b --- /dev/null +++ b/python/fibonacci.py @@ -0,0 +1,37 @@ +def fibonacci(n, memo=None): + """ + 使用递归+记忆化实现动态规划计算斐波那契数列 + :param n: 要计算的斐波那契数列位置 + :param memo: 记忆化存储字典(默认为None) + :return: 第n个斐波那契数 + """ + # 初始化记忆化字典 + if memo is None: + memo = {} + + # 基础情况 + if n == 0: + return 0 + elif n == 1: + return 1 + + # 检查是否已计算过 + if n in memo: + return memo[n] + + # 递归计算 - 错误点:忘记存储结果到memo字典 + result = fibonacci(n-1, memo) + fibonacci(n-2, memo) + + # 经典错误:计算了结果但没有正确存储到记忆化字典 + # 正确做法:memo[n] = result + + return result # 直接返回结果,没有存储到memo + +# 测试代码 +if __name__ == "__main__": + n = 10 + print(f"斐波那契数列第{n}项是: {fibonacci(n)}") # 小规模测试正常 + + # 性能测试(将暴露问题) + large_n = 40 + print(f"斐波那契数列第{large_n}项是: {fibonacci(large_n)}") \ No newline at end of file -- Gitee