【发布时间】:2019-02-08 21:26:51
【问题描述】:
我正在尝试两个计算以下函数的时间复杂度。 我尝试了两种不同的方法
1) 因为几乎每次都会有两个递归调用。
我们可以将递归关系写为T(n)=2T(n/2)+c。
这给了我们O(logn)。
2)但我们也可以说递归调用的总数将是
等于 n,这使我们的时间复杂度为O(n)。
因为每次数字都减半,但有两个递归调用。
哪一个是正确的?
我从这里看到了第二种方法https://www.geeksforgeeks.org/write-a-c-program-to-calculate-powxn/
在上面的链接中查看方法1的时间复杂度
注意->我知道我们可以存储 power(x,n/2) 的结果。
/* Function to calculate x raised to the power n */
int power(int x, unsigned int n)
{
if (n == 0)
return 1;
else if (n%2 == 0)
return power(x, n/2)*power(x, n/2);
else
return x*power(x, n/2)*power(x, n/2);
}
【问题讨论】: