两个变量的递归函数的时间复杂度。

问题描述 投票:0回答:1

我有一个递归函数,它接收两个变量,然后分两次调用。

def f(n, m):
    if ((n == 0) or (m == 0)):
        return 1

    return f(n - 1, m) + f(n, m - 1)

前三次递归调用是这样的。

                    f(n-2, m)
                   /
          f(n-1, m)
         /         \
        /           f(n-1, m-1)
       /
f(n, m)
       \
        \           f(n-1, m-1)
         \         /
          f(n, m-1)
                   \
                    f(n, m-2)

我知道一个函数在两次调用中分裂出来的时间复杂度是指数级的,即: O(2^n)但我如何才能包含第二个参数及其条件?

algorithm recursion big-o complexity-theory
1个回答
1
投票

你传递给每个函数的内容不会改变时间复杂度。

大O应该是最坏的情况,而不是最好的情况。或者至少是普通情况。如果你把项目按字母顺序放入二进制树中,它的性能将是O(n),而不是O(log2 n)。但是没有人说二进制树中的插入性能是O(n),因为那不是常见情况。

© www.soinside.com 2019 - 2024. All rights reserved.