例如,如果数字为
,则为深度218
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);
}
答案 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。这样您就不需要设置任何杂乱的循环结构或重用任何代码。