他们是一种有条不紊的方法吗?就像给我这个功能一样:
public static int f2(int[] arr, int lo, int hi)
{
// N = initial value of (hi-lo+1) of 1st activation of f2
if(lo == hi)
return lo;
if(arr[hi] >= arr[lo])
return f2(arr, lo+1, hi);
return f2(arr, lo, hi-1);
}
我所看到的许多资源都没有告诉你如何获得你从未见过的功能的记号。有没有办法非直观地做到这一点?如果是这样,我将如何获得大O的最坏情况运行时间?感谢。
答案 0 :(得分:3)
O {n} n
为hi - lo + 1
,在每次递归中,lo
和hi
之间的差距减小1.
我怀疑通常无法解决这个问题,因为最坏的情况与尝试解决Halting problem相同。