【发布时间】:2019-03-08 04:58:58
【问题描述】:
因此,该算法通过使用参数 i 来引用 A[i] 来生成集合 A 的子集,在每个步骤中,有两个调用,一个包括 A[i],另一个不包括 A[i]。 当 i==n 时搜索停止。
所以,这是有道理的,但我不明白最后一个语句在这里做了什么..
void search(int i, ArrayList<Integer> subset,ArrayList<Integer> A, int n){
if (i==n) System.out.println(subset);
else{
search(i+1,subset,A,n);
subset.add(A.get(i));
search(i+1,subset,A,n);
subset.remove(subset.size()-1); /*Why do we need to do this? I am not making any function call after this*/
}
}
我尝试排除最后一条语句,但它会重复子集中的元素。最后一条语句有什么用?
【问题讨论】:
-
您是否尝试使用回溯生成子集?
-
@uneq95 是的,我知道这不是最有效的方法。
-
@MBo 为您提供正确答案