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
希望这有帮助 解决此问题的一种方法是为问题编写一个递归关系。如果您注意到,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
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)