求解释代码,添加注释或者画图解释(在网上看到的求组合的递归算法,绕晕头了看不懂,求解释)
public class Test1 {
public static void main(String[] args) {
select(2);
}
private static void select(int k) {
char[] result = new char[k];
subselect(0, 1, result, k);
}
private static void subselect(int head, int index, char[] r, int k) {
for (int i = head; i < a.length + index - k; i++) {
if (index < k) {
r[index - 1] = a[i];
System.out.println("i="+(i)+";index="+(index));
subselect(i + 1, index + 1, r, k);
} else if (index == k) {
r[index - 1] = a[i];
System.out.println(";i="+(i)+";index="+(index)+";index==k:"+(index==k));
System.out.print(i+"===");
System.out.println(r);
subselect(i + 1, index + 1, r, k);
} else {
System.out.println("++");
return;//返回到何处?奇怪
}
}
}
private static char[] a = { 'a', 'b', 'c' };
}
return; 就是代表此函数执行结束了,在你这儿代表当时执行的subselect函数结束了,如果你的if else,或者for() 之后有代码,返回之后执行之后的代码,不过是你上一个subselect的代码,好比是每个函数都必须执行12345,3处递归了,return之后,执行上一个函数的45.以此类推
return; 返回调用者。对于顶层的调用,返回select,对于在递归内的调用,返回上一层的subselect
逐层返回,你可以这么想,第一次方法没有执行完,又开始执行这个。。。。。。。最后从最后一层往上返回
debug,一步一看着走一遍就明白了撒,注意参数变化就好嘞
其实就是结束的意思 删掉也没事
debug调试自己看,return就是函数的结束,返回上一层调用此函数的地方