找到除数及其除数等到一定深度

find divisors and their divisors and so on to certain depth

例如深度 2 如果数字是

18
level 1: 1 2 3 6 9 18
level 2: 1 1 2 1 3 1 2 3 6 1 3 9 1 2 3 6 9 18

如果找到数字的单个除法器的算法如下

static Integer [] divider(int n) {
    List<Integer> resultList = new ArrayList<Integer>();
    Integer [] result;
    for (int i = 1; i <= n/2; i++) {
       if (n%i == 0)
           resultList.add(i);
    }
    resultList.add(n);
    result = resultList.toArray(new Integer[resultList.size()]);

    return result;
}

我不确定循环应该如何

for(int i=1;i<depth;i++){ 
divisors(n);

}
static Integer [] divider(int n, int level) {
    List<Integer> resultList = new ArrayList<Integer>();
    Integer [] result;
    for (int i = 1; i <= n/2; i++) {
      if (n%i == 0) {
           if(level > 1){
               Integer [] divList = divider(i, level-1);
               for(Integer div : divList) {
                   resultList.add(div);
               }
           }
           else
               resultList.add(i);
      }
    }
    resultList.add(n);
    result = resultList.toArray(new Integer[resultList.size()]);

    return result;
  }

以上是你问题的递归解法。基本上,它所做的是递归调用您的除法器函数并跟踪它的当前 "level"。如果它计算的数字高于 1,则计算它的除数并将其添加到 resultList 中。如果不是,它只将除数本身添加到 resultList。这样您就不需要设置任何混乱的循环结构或重用任何代码。