Jerry__J 2016-05-16 13:50 采纳率: 83.3%
浏览 1583
已采纳

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

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条回答 默认 最新

  • 逝水&流年 2016-05-17 04:13
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器