作者回复: 很棒 我稍后sync下来看
作者回复: 循环的时候不能少了1,可以在结果中判断是否已经涵盖1,我稍微修改了一下
public static void recursion(long total, ArrayList<Long> result) {
if (total == 1) {
if (!result.contains(1L)) result.add(1L);
System.out.println(result);
return;
} else {
for (long i = 1; i <= total; i++) {
if ((i == 1) && result.contains(1L)) continue;
ArrayList<Long> newList = (ArrayList<Long>) (result.clone());
newList.add(Long.valueOf(i));
if (total % i != 0) {
continue;
}
recursion(total / i, newList);
}
}
}
作者回复: 回答很棒,下次可以将运行结果也贴出来👍
作者回复: 确实两者的递推方向是不一样的,不过递归在计算机的实现中,是使用的函数调用,在满足条件后,函数开始逐级返回,这时候又是正向递推了,所以我觉得这也是从1到n
作者回复: 如果循环从2开始,可能会漏掉一些情况,请参考为我给另一位网友李尧的回复
作者回复: 这里作为教学案例,可以遍历所有情况,包括4x2和2x4。至于1,需要特殊处理一下,你可以思考看看,或者看看之前读者的留言
作者回复: 同时考虑了1出现和不出现的情况 👍
作者回复: 这个是C版本吗?
作者回复: 少了一些可能。比如,输入8,少了
[1, 2, 2, 2]
[1, 2, 4]
[1, 4, 2]
[2, 1, 2, 2]