... Понятия не имею, как работает рекурсия ...
Рекурсия означает, что метод, в котором вы находитесь, вызывается изнутри самого себя с некоторыми другими аргументами, и есть некоторая проверкакоторый завершается возвратом значения или продолжает вызывать себя рекурсивно .
call()
является косвенно рекурсивным, поскольку он либо завершается с возвращением -1
или max
, либо вызываетсам снова с новыми аргументами и продолжает делать это до тех пор, пока не завершится или не завершится с ошибкой OutOfMemory
при заполнении стека.
Этот метод не рекурсивен: хотя и имеет плохое имя.
static int compare(int m1, int m2) {
if(m1>m2)
return m1;
else
return m2;
}
и может быть записан (и переименован) как
static int min(final int m1, final int m2)
{
return Math.min(m1,m2);
}
или просто inlined
в
return Math.min(call(current.left,max),call(current.right,max));
в любом случае, вы получаете minimum
два значения, на самом деле не сравнивая их, что подразумевает другую логику и другое возвращаемое значение.
В любом случае этот метод не является рекурсивным, и если логика m1 > m2
является подходящей, это не может быть проблемой,больше похоже на вклад в это еunction - не то, что вы ожидаете.
Пошаговая отладка - это мощный инструмент, который каждый опытный разработчик использует каждый день!