前几天写递归运算时候,报了一个错误--->内存溢出,代码如下:
/**
* 获取所有乘积为n的小于n的数字,1只能出现一次
* n可以拆解成各个小数相乘,每次/ 一个小于n的数字看结果是不是 1
* 同时验证 % 余数
*
* @param
* @return void
* @author kongzhi
* @date 2019年2月26日下午3:28:12
*
*/
public static void getAllNumber(ArrayList<Long> result, Long targetNum) {
if (targetNum == 1) {
//contains 用的是 equals比较值 --->
if (!result.contains(1L)) {
result.add(Long.valueOf(1));
}
System.out.println(result);
return;
} else {
for (long jj = 1; jj <= targetNum; jj++) {
if (targetNum % jj != 0) {
continue;
}
//避免1添加
//特别注意下:这里 contains后面必须写 1L,如果ArrayList<Long> 是Long的话,因为会转Object,1 默认对应 Integer
if (jj == 1L && result.contains(1)) {
continue;
}
@SuppressWarnings({ "unchecked" })
ArrayList<Long> resultNew = (ArrayList<Long>)result.clone();
resultNew.add(Long.valueOf(jj));
getAllPlusResult(resultNew, targetNum / jj);
}
}
}
/**
* 获