所以我们都知道这种递归的教师功能如何运作:
public static int fac(int number) {
return (number > 1) ? number * fac(number - 1) : number;
}
如果你用5作为参数调用它,它将评估为:
return 5 * 4 * 3 * 2 * 1
到目前为止,这么好。但是,如果我想要返回的值无法连接怎么办?例如,如果我想返回一些列表:
public static List<Integer> getSubarraysOf(List<Integer> array) {
if (array.size() <= 1) {
return array;
}
return array + getSubarraysOf(array.subList(1,array.size() - 1));
}
当然这不起作用!我可以想象这个工作的唯一方法是引用一个全局变量(是一个包含Lists的List),添加结果列表,或者将结果List作为参数引入即可。两种解决方案都闻到了味道,我想知道是否有人比我有更聪明的解决方案。
答案 0 :(得分:0)
您是否正在寻找这样的解决方案
public static void main(String [] args)
List<Integer> list = new ArrayList<>();
for (int i = 1; i < 6; ++i) list.add(i);
System.out.println("1### " + list);
System.out.println("2### " + getSubArraysOf(list));
}
private static List<Integer> getSubArraysOf(List<Integer> array) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < array.size(); ++i) {
result.addAll(array.subList(0, array.size() - i));
}
return result;
}
以下结果
1### [1, 2, 3, 4, 5]
2### [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 1, 2, 1]
或者可能就是那样
public static void main(String [] args)
List<Integer> list = new ArrayList<>();
list.add(5);
System.out.println("1### " + list);
System.out.println("2### " + getSubArraysOf(list));
}
private static List<Integer> getSubArraysOf(List<Integer> array) {
int lastItem = array.get(array.size() - 1);
if (lastItem == 1) return array;
array.add(--lastItem);
return getSubArraysOf(array);
}
结果
1### [5]
2### [5, 4, 3, 2, 1]