我想通过递归方程计算程序的时间复杂度。
这就是。。。
int f(int x)
{
if(x<1) return 1;
else return f(x-1)+g(x);
}
int g(int x)
{
if(x<2) return 1;
else return f(x-1)+g(x/2);
}
我写出了它的递归方程并尝试解决它,但它变得越来越复杂。
T(n) =T(n-1)+g(n)+c
=T(n-2)+g(n-1)+g(n)+c+c
=T(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c
=T(n-4)+g(n-3)+g(n-2)+g(n-1)+g(n)+c+c+c+c
……………………….
……………………..
Kth time …..
=kc+g(n)+g(n-1)+g(n-3)+g(n-4).. .. . … +T(n-k)
Let at kth time input become 1
Then n-k=1
K=n-1
Now i end up with this..
T(n)= (n-1)c+g(n)+g(n-1)+g(n-2)+g(n-3)+….. .. g(1)
我无法进一步解决这个问题。无论如何,如果我们计算此程序中函数调用的次数,就可以很容易地看出时间复杂度是指数级的,但我想用递归来证明它。怎么做呢?
答案1中的解释看起来正确,我做过类似的工作。
这段代码中最困难的任务是编写递归方程。我画了另一个图表,发现了一些模式,我认为我们可以从这个图表中得到一些帮助,找出可能的递归方程。
And I came up with this equation , not sure if it is right ??? Please help.
T(n) = 2*T(n-1) + c * logn
g(x) = 2g(x - 1) - g((x - 1) / 2) + g(x / 2)
,然后将其代入f(x)
中以解决 f(x)。 - nhahtdhf(x) = f(x - 1) + g(x)
和g(x) = f(x - 1) + g(x/2)
可以得到一些推导。g(x) = f(x - 1) + g(x/2) = f(x - 2) + g(x - 1) + g(x/2) = g(x - 1) - g((x - 1)/2) + g(x - 1) + g(x/2)
。(虽然我不知道如何解决这个问题)。 - nhahtdh