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 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?