带记忆功能的Fibonacci数字在Python中运行缓慢?

2024-06-16 11:45:27 发布

您现在位置:Python中文网/ 问答频道 /正文

def fib(n):
    if n == 1:
        return 0
    if n == 2:
        return 1
    return fib(n-2) + fib(n-1)


def memo(f):
    cache = {}
    def memoized(n):
        if n not in cache:
            cache[n] = f(n)
        return cache[n]
    return memoized

fib1 = memo(fib)

这段代码在我的笔记本上运行得很慢, 但是如果我把fib1改成fib,那么一切都很好…有人知道原因吗?谢谢!在


Tags: 代码incachereturnifdefnot笔记本
3条回答

我同意添加一些指纹你可能会发现问题。你很快就要得到它了。在

你现在只存储n,其中n是fib1的参数。在fib中,调用fib,它不会存储任何以前计算的值。因此,通过向fibprint "fib ", n添加print语句并调用fib1(4),您将得到以下输出:

fib 4
fib 2
fib 3
fib 1
fib 2

所以你看到它用n=2调用fib两次。之所以fib = memo(fib)更快,是因为它实际上是momolizing,因为您将fib重新定义为记忆函数。在

在该代码中,fib是非记忆化函数的名称。fib1是你给记忆化函数起的名字。但是如果你看到你的代码,你会看到它递归地调用fib非记忆版本。所以为什么你没有速度优势。在

{{{cd3>

相关问题 更多 >