找到除数及其除数等等

时间:2017-06-10 17:53:20

标签: arrays algorithm math integer division

例如,如果数字为

,则为深度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);

}

1 个答案:

答案 0 :(得分:0)

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;
  }

以上是您问题的递归解决方案。基本上,它所做的是以递归方式调用你的分频器功能并跟踪它的当前&#34;级别&#34;。如果它计算的数字大于1,则计算它的除数并将其加到resultList中。如果不是,它只将除数本身添加到resultList。这样您就不需要设置任何杂乱的循环结构或重用任何代码。