#java #recursion
#java #рекурсия
Вопрос:
Привет, я новичок в Java, поэтому, пожалуйста, будьте нежны. Я уверен, что код кажется длинным и уродливым, но мы все с чего-то начинаем.
Я пытаюсь найти наибольшее число в массиве, используя рекурсию. Мой вывод равен 0 для любого массива, по умолчанию -1 работает.
Любая помощь, направляющая меня в правильном направлении, была бы большой помощью
Заранее спасибо всем-
public int maxInt(MyList<Integer> m){
int result = 0;
int e0;
int len = m.length();
int e1;
if (len == 0) {
result = -1;
}
else if(len == 1) {
e0 = m.getElement(0);
result = e0;
}
else if(len == 2) {
e0 = m.getElement(0);
e1 = m.getElement(1);
if (e0 > e1) {
result = e0;
}else {
result = e1;
}
}
else if(len > 2) {
e0 = m.getElement(0);
e1 = m.getElement(1);
if (e0 <= e1){
m.removeElement(0);
result = maxInt(m);
m.addElement(0, e0);
}
}
return resu<
}
Ответ №1:
В вашем len > 2
случае, если e0
это большее число, ничего не происходит. В общем, этот код просто не работает — вы хотите сначала запустить код m.removeElement
, maxInt
, m.addElement
чтобы получить наибольшее число из подсписка, а затем сравнить это число с элементом 0, возвращая тот, который больше.
Я предлагаю вам научиться отлаживать — просто писать код, а затем, если это не сработает, молиться, чтобы кто-нибудь на SO помог … в лучшем случае утомительное кодирование 😉
Это просто! Возьмите ручку и бумагу и пишите вместе с компьютером. Вы запускаете программу в своей голове, записывая, что происходит. Используйте отладчик для пошагового выполнения кода (или, если необходимо, множество операторов System.out.println, разбросанных по всему вашему коду).
Каждый раз, когда программа выдает результат, отличный от того, что вы думаете? Вы обнаружили ошибку.
Это так просто.
Ответ №2:
Вы говорите, что вы новичок Java
, но на самом деле это не имеет ничего общего с. Java
Это связано с пониманием recursion
, а ловушки и подводные камни одинаковы (или очень похожи) и на других языках.
Я могу сказать вам прямо сейчас, что код должен быть не более 10 строк (и меньше, если у вас есть sublist
метод.
Я бы порекомендовал вам сначала попробовать несколько простых вещей, чтобы получить feel
рекурсию for. Суммирование первых n нечетных целых чисел или просто вывод значений от 1 до n. А затем печать значений от n до 1 только путем изменения местоположения инструкции print.