Recursion 最坏情况运行时间

Recursion 最坏情况运行时间,recursion,big-o,time-complexity,Recursion,Big O,Time Complexity,我有以下代码片段: public static boolean sumSearch(int[] a, int n, int x) { if (n == 0) { return ( x==0 ); } return (sumSearch(a, n-1, x-a[n-1]) || sumSearch(a, n-1, x)); 所以从我收集到的。。。第三个参数重要吗?因为在最坏的情况下返回x==0并不重要,因为n-1已经完成,所以最坏的时间复杂度只能是O(n

我有以下代码片段:

public static boolean sumSearch(int[] a, int n, int x) {
    if (n == 0) {
         return ( x==0 );
    }
    return (sumSearch(a, n-1, x-a[n-1]) || sumSearch(a, n-1, x));

所以从我收集到的。。。第三个参数重要吗?因为在最坏的情况下返回x==0并不重要,因为n-1已经完成,所以最坏的时间复杂度只能是O(n)?这是正确的思路吗?

好吧,考虑到这类问题是NP完全问题,我认为我们可以排除O(n)的时间复杂性。我认为这个算法的最坏情况时间是O(2^n)。如果你把调用想象成一棵树,那么树的每一个“级别”都有两倍于前一个级别的调用,这当然是O(2^n)。

这条线是用来调用
子搜索的,还是有另一个函数
sumSearch
?如果
|
没有短路,这是真的,这无疑使分析更容易。但是你可以给我一个更严格的限制it@JasonBaker我假设最坏的情况是
|
不会短路,因为左侧永远找不到和,因此总是返回false。你说得对,我想得太多了。我必须把它画出来,但你是对的