请高人解释下这段递归代码!

bios8086 2016-09-14 03:52:41
//目的: 输出 从N个元素里挑出K个组合数
// 例如 ABC中取2个有 AB BC AC 

 static void combinations2(String[] arr, int len, int startPosition, String[] result)
{
// String[] arr = {"A","B","C","D","E","F"};
//combinations2(arr , 3, 0 , new String[3]);


if (len == 0)
{
System.out.println(Arrays.toString(result));
return;
}
for (int i = startPosition; i <= arr.length-len; i++)
{
result[result.length - len] = arr[i];
combinations2(arr, len-1, i+1, result);
}
}
...全文
482 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
D7Yuan 2016-09-16
  • 打赏
  • 举报
回复
断点跟进一下吧,看懂了说不明白。这个想法很厉害,大致意思就像进位一样,AB[C,D,E,F]取完后B进一位,直到进位结束。开阔眼界了,感谢!
huise513 2016-09-14
  • 打赏
  • 举报
回复
坐等大神解释、、、
bios8086 2016-09-14
  • 打赏
  • 举报
回复
引用 7 楼 securitit 的回复:
我真是想说: 1.实现这个功能,还用递归,真是画蛇添足。 2.就算你用了递归,你用的也得对啊,输出的是你想要的吗,真是逗..
这个代码是对的,你不信可以运行下!
  • 打赏
  • 举报
回复
断点、跟进一下
securitit 2016-09-14
  • 打赏
  • 举报
回复
我真是想说: 1.实现这个功能,还用递归,真是画蛇添足。 2.就算你用了递归,你用的也得对啊,输出的是你想要的吗,真是逗..
自由自在_Yu 2016-09-14
  • 打赏
  • 举报
回复
以此为例:String[] arr = {"A","B","C","D","E","F"}; combinations2(arr,3,1,new String[3]); 结果:[B, C, D] [B, C, E] [B, C, F] [B, D, E] [B, D, F] [B, E, F] [C, D, E] [C, D, F] [C, E, F] [D, E, F] 第一次循环是先在result添加B,然后第二次循环添加C,第三次循环添加E,这样就变成[B,C,E], 此时len循环三次就变成0了,所以执行 if (len == 0) { System.out.println(Arrays.toString(result)); return; } 就是打印一个[B,C,E]的循环。其它的也是一样
bios8086 2016-09-14
  • 打赏
  • 举报
回复
顶起,希望能被高人看到!
逗泥丸的平方 2016-09-14
  • 打赏
  • 举报
回复
你在方法入口,把每次的参数都打印一遍 自然就明白了
码上大侠 2016-09-14
  • 打赏
  • 举报
回复
往result里写数据时候用到了递归,以 ABC中取2个为例,有这样的规律:result[0]取A的话,result[1]的取值就是从BC中取1个。可以看到递归外层还有一个循环,循环的目的就是限制第一个值,这样后面的值就可以递归了。不是高人,说的也太不清楚,凑合看吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧