func3(int n) {
for (int i = 1; i<n; i++)
System.out.println("*");
if (n <= 1)
{
System.out.println("*");
return;
}
if(n % 2 != 0) //check if odd
func3(n - 1)
func3(n / 2);
return;
}
我需要计算这个算法的复杂性 我试过把它分成2个案例: 当n是偶数(2 ^ i数)时,只有1个呼叫的最佳情况,并且复杂度将为T(n)= T(n / 2)+ O(n)。 有人可以帮我解决最坏的情况吗?
答案 0 :(得分:0)
由于时间复杂,您通常只计算最大的操作。它是关于算法如何与N一起缩放的。在这种情况下,它将始终与N线性地缩放 - 如果数字是偶数,则它将是O(n +(n / 2)+(n / 4)。 ..)简化为O(n)。如果是奇数,则为O(n +((n-1)+(n-1)/ 2 +(n-1)/ 4 ...)+ n / 2 + n / 4 ......)它再次简化为O(n) - 这一点是它与大数字线性比例,而不是对数或指数。
另请注意,奇数n / 2将是偶数,因此您最多只能有两个递归&#34;路径&#34; - (n-1)/ 2和n / 2都是偶数。