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)
但我试图进行的编辑因没有“保持海报的原意”而被拒绝