阅读背景:

【踩坑记录】一个类型错误引发的溢出

来源:互联网 

前几天写递归运算时候,报了一个错误--->内存溢出,代码如下:

/**
	 * 获取所有乘积为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);
			}
		}
	}
/**
	 * 获



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: