你怎样才能重新回归不可归结的价值观?

时间:2016-04-30 08:56:39

标签: java return concatenation return-value

所以我们都知道这种递归的教师功能如何运作:

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作为参数引入即可。两种解决方案都闻到了味道,我想知道是否有人比我有更聪明的解决方案。

1 个答案:

答案 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]
相关问题