diff --git a/python/fibonacci.py b/python/fibonacci.py new file mode 100644 index 0000000000000000000000000000000000000000..28ad76b273773ceebacab3261fad67f6c91af6d0 --- /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