【发布时间】:2014-04-17 10:38:53
【问题描述】:
我有递归组合功能:
static void combinations2(String[] arr, int len, int startPosition, String[] result) {
if (len == 0) {
for (String n : result) {
System.out.print(n + " \n");
}
return;
}
for (int i = startPosition; i <= arr.length - len; i++) {
result[result.length - len] = arr[i];
combinations2(arr, len - 1, i + 1, result);
}
}
输入:
arr = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"} - input array e.g.
len = 3 - length of each combination
startPosition = 0
result - result of each combination
输出:
Item 1
Item 2
Item 3
Item 1
Item 2
Item 4
Item 1
Item 2
Item 5
Item 1
Item 3
Item 4
Item 1
Item 3
Item 5
Item 1
Item 4
Item 5
Item 2
Item 3
Item 4
Item 2
Item 3
Item 5
Item 2
Item 4
Item 5
Item 3
Item 4
Item 5
我应该怎么做才能将其更改为迭代替代?我阅读了有关堆栈的内容并写了几行..但是返回函数呢?怎么处理?
我做了这样的事情:
static void combinations2(String[] arr, int len, int startPosition, String[] result) {
Stack<Integer> stos = new Stack<>();
stos.push(startPosition);
stos.push(len);
int i = 0;
while (!stos.isEmpty()) {
len = stos.pop();
startPosition = stos.pop();
if (len == 0) {
for (String n : result) {
System.out.print(n + " \n");
}
System.out.println(" ");
stos.push(startPosition);
stos.push(len+1);
} else {
for (i = startPosition; i <= arr.length - len; i++) {
result[result.length - len] = arr[i];
//combinations2(arr, len - 1, i + 1, result);
stos.push(i + 1);
stos.push(len - 1);
break;
}
}
}
}
我得到了输出:
Item 1
Item 2
Item 3
Item 1
Item 2
Item 4
Item 1
Item 2
Item 5
有人可以告诉我如何生成后续步骤吗?
【问题讨论】:
-
第一个输出不是你想要的输出吗?您想通过第二个程序实现什么类型的输出?
-
一模一样,只是使用了迭代的方法……