Java 理解计算功率集的递归流程
我找到了一个计算数组幂集的代码 我无法理解Java 理解计算功率集的递归流程,java,Java,我找到了一个计算数组幂集的代码 我无法理解subseq()方法中发生了什么。 根据我的理解和调试时看到的情况- 1. first [] is added. 2. Goes inside loop , `i=0` adds `[1]` 3. recursive call , `i=1` adds `[1,2]` 4. recursive call , `i=2` adds `[1,2,3]` 当i=3时,它不应进入循环本身, 为什么在此之后,执行将删除。 你能帮我理解一下吗 public cla
subseq()
方法中发生了什么。
根据我的理解和调试时看到的情况-
1. first [] is added.
2. Goes inside loop , `i=0` adds `[1]`
3. recursive call , `i=1` adds `[1,2]`
4. recursive call , `i=2` adds `[1,2,3]`
当i=3
时,它不应进入循环本身,
为什么在此之后,执行将删除
。
你能帮我理解一下吗
public class printSubSequences {
public static void main(String[] args) {
int[] num = {1,2,3};
List<List<Integer>> subsets = new ArrayList<>();
subseq(0, num, new ArrayList<Integer>(), subsets );
System.out.println(subsets);
}
public static void subseq(int index, int[] num, List<Integer> current, List<List<Integer>> subsets) {
subsets.add(new ArrayList<>(current));
for(int i = index ; i< num.length; i++) {
current.add(num[i]);
subseq(i+1, num, current, subsets);
current.remove(current.size() -1);
}
}
}
公共类打印子序列{
公共静态void main(字符串[]args){
int[]num={1,2,3};
列表子集=新的ArrayList();
subseq(0,num,new ArrayList(),子集);
系统输出打印项次(子集);
}
公共静态void subseq(int索引,int[]num,列表当前,列表子集){
添加(新ArrayList(当前));
for(int i=索引;i
这是一个简单的算法
当递归到达底部时:
subseq(0, {1,2,3}, [], []);
subseq(1, {1,2,3}, [1], [[]]);
subseq(2, {1,2,3}, [1,2], [[], [1]]);
subseq(3, {1,2,3}, [1,2,3], [[], [1], [1,2]]); <---
此时
current=[1,2,3]
,因此最后一个元素3
将被删除。Java的简单基础是,它将逐个执行每一行。它将方法调用存储在线程的堆栈内存中
以你为例,
i=0
添加[1]
i=1
添加[1,2]
,线程堆栈[A]
i=2
添加[1,2,3]
,线程堆栈[B,A]
[B,A]
并转到调用B。它将开始执行递归方法调用之后的操作,然后将其从堆栈中删除。对于我们来说,在执行删除操作后,堆栈将类似于[A]
删除3
A
和删除2
1
请注意,我提到的操作别名完全是为了我们理解概念。它们实际上被命名为方法名。您可以在上了解有关递归的更多信息。提示:如果您不了解代码的功能。。。第一步是添加打印语句。让你的代码告诉你它在做什么!。。。或者使用调试器(但我并不是说最好使用调试器),请注意,您可能希望在这里接受答案。当你的问题解决后,花时间接受最有用的答案!
current.remove(current.size() -1);