Jerry__J
Jerry__J
采纳率83.3%
2016-05-16 13:50

求解释代码,添加注释或者画图解释(在网上看到的求组合的递归算法,绕晕头了看不懂,求解释)

2
  • java
已采纳

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' };
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • zhanglonghuan0 I-DO 5年前

    return; 就是代表此函数执行结束了,在你这儿代表当时执行的subselect函数结束了,如果你的if else,或者for() 之后有代码,返回之后执行之后的代码,不过是你上一个subselect的代码,好比是每个函数都必须执行12345,3处递归了,return之后,执行上一个函数的45.以此类推

    点赞 1 评论 复制链接分享
  • lxk_1993 103style 5年前

    其实就是结束的意思 删掉也没事

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 5年前

    return; 返回调用者。对于顶层的调用,返回select,对于在递归内的调用,返回上一层的subselect

    点赞 1 评论 复制链接分享
  • qq_28406209 Amy_LLJ 5年前

    debug调试自己看,return就是函数的结束,返回上一层调用此函数的地方

    点赞 评论 复制链接分享
  • aline200 aline200 5年前

    debug,一步一看着走一遍就明白了撒,注意参数变化就好嘞

    点赞 评论 复制链接分享
  • u012966947 拿云之志 5年前

    逐层返回,你可以这么想,第一次方法没有执行完,又开始执行这个。。。。。。。最后从最后一层往上返回

    点赞 评论 复制链接分享

相关推荐