我想在java中使用recurse打印一个数组,但唯一的参数是数组本身。有可能吗?
public static void printintArr(int[] a)
答案 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 )操作。