【发布时间】:2018-05-03 01:16:49
【问题描述】:
我是编程和 Stack-overflow 的新手,但我正在尝试从一个数字创建一个素因子列表,但它返回的列表不止一个,我不知道为什么。例如,当我输入 10 时,它返回 [2,5] 和 [2,5,5] 而不仅仅是 [2,5]。有人可以解释我做错了什么吗?
public class Solution {
ArrayList<Integer> primelist = new ArrayList<>();
ArrayList<Integer> findPrime(int num) {
for (int i = 2; i <= num; i++) {
if (num % i == 0) {
primelist.add(i);
num = num / i;
if (num == 1) { break;}
findPrime(num);
}
}
System.out.println(primelist);
return primelist;
}
public static void main(String[] args) {
Solution sol = new Solution();
sol.findPrime(30);//[2, 3, 5],[2, 3, 5, 5], [2, 3, 5, 5, 3, 5],[2, 3, 5, 5, 3, 5, 5]
sol.findPrime(10);//[2, 5],[2, 5, 5]
}
}
【问题讨论】:
-
你为什么希望它只打印一次?
-
由于该方法是递归的,它被多次调用。每次调用都会打印另一行。
-
您正在 if 块中进行递归调用。
-
@EJP “我是编程和 Stack-overflow 的新手……”不必粗鲁。
-
@KevinAnderson 感谢您的回复。我没有正确理解循环,并认为我必须递归调用该函数才能使其在新的 num 上循环。现在我理解 EJP 的评论,我可以通过递归或使用循环来完成此操作,但将两者混合使用是没有意义的。谢谢
标签: java primes prime-factoring