Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个递归函数的时间复杂度_Java_Algorithm_Recursion - Fatal编程技术网

Java 这个递归函数的时间复杂度

Java 这个递归函数的时间复杂度,java,algorithm,recursion,Java,Algorithm,Recursion,我有一个递归函数。我想知道这个算法的时间复杂度。如果给定一个数,我们必须找到所有与给定数相加的子集 public void getSequences(int n, ArrayList<Integer> buffer, int sum) { if(sum == n) { for(int j=0; j<buffer.size(); j++) { System.out.print(buffer.get(j) + " "); } Sy

我有一个递归函数。我想知道这个算法的时间复杂度。如果给定一个数,我们必须找到所有与给定数相加的子集

public void getSequences(int n, ArrayList<Integer> buffer, int sum) {
  if(sum == n) {
     for(int j=0; j<buffer.size(); j++) {
         System.out.print(buffer.get(j) + " ");
     }
     System.out.println("");
  }

  for(int i=1; i<n; i++) {
     sum += i;
     if(sum > n) {
       break;
     }
     buffer.add(i);
     getSequences(n, buffer, sum);
     sum -= i;
     buffer.remove(i);
  }
}

ArrayList<Integer> buffer = new ArrayList<Integer>();
getSequences(3, buffer, 0);

// Output
// 1 1 1
// 1 2 
// 2 1
public void getSequences(int n,ArrayList buffer,int sum){
如果(总和=n){

对于(int j=0;j,因为代码生成每一个可能的和为n的序列,并且因为顺序很重要。它的渐近复杂性受序列大小的限制

计算所有序列的另一种方法是如下所示

  • n
    1开始

    示例:1

  • 对于长度为
    n-1
    的某些位集,如果该索引的位为on,则减少相邻序列

    示例:位集(0,1,0,0)生成序列:1(1+1)11=>1

    示例:位集(1,1,0,1)产生序列:(1+1+1)(1+1)=>32

  • 由于大小为
    n-1
    的特定位集产生唯一序列,因此该算法显然是O(2^n)。

    复杂度是O(k),其中k-此类子集的数量
    buffer.remove(i);
    不正确,并导致
    IndexOutOfBoundsException
    。我确信您的意思是
    buffer.remove(buffer.size()-1)
    但我试图进行的编辑因没有“保持海报的原意”而被拒绝