簡體   English   中英

在Java中使用遞歸打印數組

[英]Printing Array with recurse in java

我想在Java中使用遞歸打印一個數組,但是唯一的參數是數組本身。 可能嗎?

public static void printintArr(int[] a)

這是可能的。 這是一種方法:

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);
    }
}
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

從結尾:

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));
   }
}

到目前為止,這里的其他解決方案都涉及重復復制減去一個元素的整個數組。 這非常慢。 它們以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 2操作相比, O(n)副本后跟O(n)打印仍然要高效得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM