在java中使用递归打印数组

时间:2014-11-22 11:52:53

标签: java arrays recursion

我想在java中使用recurse打印一个数组,但唯一的参数是数组本身。有可能吗?

public static void printintArr(int[] a)

4 个答案:

答案 0 :(得分:1)

这是可能的。这是一种方法:

public static void print(int[] array) {
    if (array == null || array.length == 0) {
        return;
    } else {
        System.out.println(array[0]);
        int[] next = new int[array.length - 1];
        System.arraycopy(array, 1, next, 0, array.length - 1);
        print(next);
    }
}

答案 1 :(得分:1)

public static void main(String[] args) {
    int[] array = new int[] {1, 2, 3, 4, 5};
    printArr(array);
}

public static void printArr(int[] a) {
    if (a != null && a.length > 0) {
        System.out.println(a[0]);
        // Call the function printArr with the full array, without the first element
        printArr(Arrays.copyOfRange(a, 1, a.length));
    }
}

您必须导入 java.util.Arrays

输出:

1
2
3
4
5

答案 2 :(得分:0)

从结束:

void printer(int[] input){
   if(input.length > 0){
       System.out.println(input[input.length-1]);
       printer(Arrays.copyOf(input, input.length-1));
   }
}

从一开始:

void printer(int[] input){
   if(input.length > 0){
       System.out.println(input[0]);
       printer(Arrays.copyOfRange(input, 1, input.length));
   }
}

答案 3 :(得分:0)

到目前为止,这里的其他解决方案都涉及重复复制整个数组减去一个元素。这非常慢。它们在 O(n 2 时间内运行。

有一种方法可以在 O(n)时间内完成此操作,但使用List

public void print(final List<?> list) {
    if (list.isEmpty()) {
        return;
    }
    System.out.println(list.get(0));
    print(list.subList(1, list.size()));
}

由于subList视图而非副本,因此此方法将在 O(n)时间内运行期待。遗憾的是需要List而不是数组。

幸运的是,有一种非常简单的方法可以将Object数组放入List

final String[] data = {"a", "b", "c", "d"};
List<String> list = Arrays.asList(data);

这不会复制数组,它只是将数组视图作为List返回。遗憾的是,这对原始数组不起作用。为此,您需要执行以下操作:

final int[] data = {1, 2, 3, 4};
Arrays.stream(data).boxed().collect(toList());

哪个需要副本。

我要指出的是, O(n)副本后跟 O(n)打印仍然比单个更高效> O(n 2 操作。