[英]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.