首页 > 解决方案 > 递归爬升ArrayList

问题描述

我目前正在为朋友制作一个程序。他给了我一个 csv 文件,它输出深度为 3 的所有组合。如果用户要给出他们想要的深度,我将如何使这部分递归。

           List<BigDecimal> csvOut;

           for (int i = 0; i < records.size(); i++)
           {

               for (int j = i + 1; j < records.size(); j++)
               {
                   csvOut  = new ArrayList<>();
                   csvOut.add(records.get(i));
                   csvOut.add(records.get(j));
                   csvOut.add(records.get(i).add(records.get(j)));
                   System.out.println(csvOut);
                   writeToCSV(csvOut, csvWriter);
                   for (int k = j + 1; k < records.size(); k++)
                   {
                       csvOut  = new ArrayList<>();
                       csvOut.add(records.get(i));
                       csvOut.add(records.get(j));
                       csvOut.add(records.get(k));
                       csvOut.add(records.get(i).add(records.get(j).add(records.get(k))));
                       System.out.println(csvOut);
                       writeToCSV(csvOut, csvWriter);
                   }
               }
           }

标签: arraysrecursion

解决方案


这是一些生成索引组合的python代码;将其视为您想要的伪代码:

size = 7

def combos( indices, m ):
    if m+1 < len(indices):
        for j in range(indices[m]+1, size):
            indices[m+1] = j
            print(indices[:m+2])
            combos(indices, m+1)

for i in range(size):
    combos( [i,0,0], 0 )

这将打印:

[0, 1]
[0, 1, 2]
[0, 1, 3]
[0, 1, 4]
[0, 1, 5]
[0, 1, 6]
[0, 2]
[0, 2, 3]
[0, 2, 4]
[0, 2, 5]
[0, 2, 6]
[0, 3]
[0, 3, 4]
[0, 3, 5]
[0, 3, 6]
[0, 4]
[0, 4, 5]
[0, 4, 6]
[0, 5]
[0, 5, 6]
[0, 6]
[1, 2]
[1, 2, 3]
[1, 2, 4]
[1, 2, 5]
[1, 2, 6]
[1, 3]
[1, 3, 4]
[1, 3, 5]
[1, 3, 6]
[1, 4]
[1, 4, 5]
[1, 4, 6]
[1, 5]
[1, 5, 6]
[1, 6]
[2, 3]
[2, 3, 4]
[2, 3, 5]
[2, 3, 6]
[2, 4]
[2, 4, 5]
[2, 4, 6]
[2, 5]
[2, 5, 6]
[2, 6]
[3, 4]
[3, 4, 5]
[3, 4, 6]
[3, 5]
[3, 5, 6]
[3, 6]
[4, 5]
[4, 5, 6]
[4, 6]
[5, 6]

推荐阅读