找到除数及其除数等到一定深度
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。这样您就不需要设置任何混乱的循环结构或重用任何代码。
例如深度 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。这样您就不需要设置任何混乱的循环结构或重用任何代码。