#java #recursion
#java #рекурсия
Вопрос:
Я пытаюсь узнать о рекурсии. Я хочу проверить, упорядочен ли массив с помощью рекурсии, но в моем коде что-то не так, потому что, когда индекс достигает значения 2, следующим шагом должно быть достижение базового варианта, но этого не происходит. Вот мой код, что я делаю не так?
public class ArrayOrdered {
public static boolean isArrayInSortedOrder(int[] array, int index)
{
boolean b;
int a1;
int a2;
if(array.length == 1 || index == 1){//base case
b=true;
}else{
b=false;
a1 = array[index - 1];
a2 = array[index - 2];
if((a1 > a2)){//ordered
isArrayInSortedOrder(array, index - 1);
}
}
return b;
}
public static void main(String[] args) {
int index=20;
int[] array={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
boolean bool = isArrayInSortedOrder(array, index);
if(bool)
System.out.println("Array ordered");
if(!bool)
System.out.println("Array NO ordered");
}
}
Комментарии:
1. измените рекурсивный, добавьте возврат
return isArrayInSortedOrder(array, index - 1);
Ответ №1:
Вы вызываете isArrayInSortedOrder(array, index - 1)
, но игнорируете возвращаемое значение. Рассмотрим следующее:
public static boolean isArrayInSortedOrder (int[] array, int index) {
if (array.length == 1 || index == 1) { //base case
return true;
}
int a1 = array[index - 1];
int a2 = array[index - 2];
if (a1 > a2) {
return isArrayInSortedOrder(array, index - 1);
}
return false;
}
Комментарии:
1. Это только проверяет, находится ли массив в порядке возрастания.
Ответ №2:
Я бы постарался избегать временных значений, если они затрудняют чтение кода. Вам также необходимо вернуть значение, которое вы повторяете (или это не будет работать так, как вы хотите). Что-то вроде
public static boolean isArrayInSortedOrder(int[] array, int index) {
if (array == null || array.length < 2 || index < 2) {
return true;
}
if (array[index - 1] > array[index - 2]) {
return isArrayInSortedOrder(array, index - 1);
}
return false;
}
И когда вы его вызываете, я бы предпочел использовать array.length
(вместо жесткого кодирования index
).
boolean bool = isArrayInSortedOrder(array, array.length);
Комментарии:
1. Да, я использовал временные значения только для отладки кода