Python 2个递归调用的大θ界

Python 2个递归调用的大θ界,python,recursion,big-o,asymptotic-complexity,big-theta,Python,Recursion,Big O,Asymptotic Complexity,Big Theta,给定f(x,y)和g(n): 定义f(x,y): 如果x

给定
f(x,y)
g(n)

定义f(x,y): 如果x<1或y<1: 返回1 返回f(x-1,y-1)+f(x-1,y-1) def g(n): 返回f(n,n)
g(n)
的大θ界是什么

我推断,由于x==y,
f(x,y)
中的条件永远不会为真,因此2个递归调用将决定复杂性

仅考虑
f(x-1,y-1)
:需要n个递归调用才能到达基本情况,每个调用分支到另一个
f(x-1,y-1)
。在这一点上,我不知道如何继续


(答案是Θ(2n)。

解决此问题的一种方法是为问题编写一个递归关系。如果您注意到,f的参数总是彼此相等(您可以看到这一点,因为它们在对g(n)的调用中开始相同,并且在这一点上总是相等的)。因此,我们可以编写一个递归关系T(n),确定f(n,n)的运行时间

那么T(n)是什么呢?作为一个基本情况,T(0)应该是1,因为一旦n降到0,函数就会做恒定的功。否则,该函数将执行常量工作,然后对大小为n-1的问题进行两次递归调用。因此,我们得到了这个循环:

T(0)=1

T(n+1)=2T(n)+1

从复发的条件来看,我们看到了一种模式:

  • T(0)=1
  • T(1)=3
  • T(2)=7
  • T(3)=15
  • T(4)=31
  • T(n)=2n+1-1
如果您愿意,可以使用归纳法正式证明这一点。因为T(n)由2n+1-1给出,所以运行时是Θ(2n)


希望这有帮助

解决此问题的一种方法是为问题编写一个递归关系。如果您注意到,f的参数总是彼此相等(您可以看到这一点,因为它们在对g(n)的调用中开始相同,并且在这一点上总是相等的)。因此,我们可以编写一个递归关系T(n),确定f(n,n)的运行时间

那么T(n)是什么呢?作为一个基本情况,T(0)应该是1,因为一旦n降到0,函数就会做恒定的功。否则,该函数将执行常量工作,然后对大小为n-1的问题进行两次递归调用。因此,我们得到了这个循环:

T(0)=1

T(n+1)=2T(n)+1

从复发的条件来看,我们看到了一种模式:

  • T(0)=1
  • T(1)=3
  • T(2)=7
  • T(3)=15
  • T(4)=31
  • T(n)=2n+1-1
如果您愿意,可以使用归纳法正式证明这一点。因为T(n)由2n+1-1给出,所以运行时是Θ(2n)

希望这有帮助

def f(x, y):
    if x < 1 or y < 1:
        return 1
    return f(x - 1, y - 1) + f(x - 1, y - 1)

def g(n):
    return f(n, n)