Я хочу напечатать массив с recurse в java, но единственным параметром является сам массив. Является ли это возможным?Печать массива с recurse в java
public static void printintArr(int[] a)
Я хочу напечатать массив с recurse в java, но единственным параметром является сам массив. Является ли это возможным?Печать массива с recurse в 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);
}
}
С конца:
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));
}
}
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
Другие решения, которые здесь используются до сих пор, требуют многократного копирования всего массива за один раз. Это исключительно медленно. Они работают в O (n) время.
Существует способ сделать это в O (п) времени, но с 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 (п) операции.
Да, если вы можете сохранить текущий индекс как поле. Это не рекомендуется, потому что передача текущего индекса в качестве параметра намного опрятно. –
Вы также можете распечатать первый элемент, создать другой массив, содержащий все остальные элементы, и вызывать рекурсивно ваш метод с помощью этого «подматрица». Это, конечно, глупое решение, но требование тоже глупо. –
@JBNizet Я полагаю, что это также было бы ответом на «У меня слишком много мощности процессора, как мне печатать массив в« O (n^2) »?». Хотя, как ни странно, это _is_ решение для cons-list. –