嵌入式循环的递归函数

时间:2012-05-31 20:39:42

标签: java algorithm recursion

我希望有一个干净的递归函数来生成与

相同的结果
static List<String> l, out;

l=new ArrayList<String>();
l.add("A");l.add("B");l.add("C");l.add("D");l.add("E");l.add("F");
for (int i = 0; i < l.size(); i++) {
    for (int j = i+1; j < l.size(); j++) {
        for (int k = j+1; k < l.size(); k++) {
            for (int t = k+1; t < l.size(); t++) {
                StringBuffer buffer = new StringBuffer(50);
                buffer.append(l.get(i));
                buffer.append(l.get(j));
                buffer.append(l.get(k));
                buffer.append(l.get(t));
                out.add(buffer.toString());
            }
        }
    }
}

这里有4个级别,例如

我试了一下http://pastebin.com/auSxQMHt

但它不起作用(参见输出,我得不到那么多结果)

THX

1 个答案:

答案 0 :(得分:0)

试试这个,你的索引是一个:

private static final void loops(int i, StringBuffer buffer, int level, int k, int size) {
        if  (level>=k){
            out.add(buffer.toString());
        } else {
            for (int j = i; j < size; j++) {
                StringBuffer buf = new StringBuffer(buffer);
                buf.append(l.get(j));
                loops(j+1, buf, level+1, k, size);
            }
        }
}

... main() ...
    int size = l.size();
    loops(0, new StringBuffer(50), 0, 4, size);
... main() ...

结果如下:

p1: 194580 duration:334 ms
p2: 194580 duration:370 ms

不使用“int j = i + 1 ”而是使用“int j = i ”并传递“循环( j + 1 > ,buf,level + 1,k);“