我必须找到以下函数的递推方程。
public static boolean f(int[] a) {
return fr(a, 0);
}
private static boolean fr(int[] a, int i) {
int n = a.length;
if(i >= n-1)
return true;
else if(a[i] > a[i+1])
return false;
else
return fr(a, i+1);
}
我认为是:
T(1)= 1
T(n)= T(n - 1)
解析我得到的结果 T(n)= n 。这是正确的?这个等式的分辨率似乎很奇怪.. 查看代码,很容易看出复杂性是Θ(n)(贯穿整个数组)。
这是一个愚蠢的问题,但让我感到困惑。 感谢任何想要帮助我的人
答案 0 :(得分:0)
T(1)= O(1)
 T(n)= T(n-1)+ O(1)

&#xA ;
 这确实是顺序搜索的签名,它具有 O(n)时间复杂度。这是因为 T(n)= T(n-1)
具有 O(n)复杂度并且 O(1)术语退出。
解决方案很简单:
假设我们知道 T(n)= T(n-1)
,我们也是知道 T(1)= O(1)
。这意味着 T(2)= O(1)
和 T(3)= O(1)
等等。所以它只相当于 n * O(1)
,它是 O(n)
。