Мой вопрос о том, как именно вызов метода работает как условие оператора if / else?
Я понимаю, что рекурсия - это метод, который вызывает себя, изменяя значение своих аргументов, пробуется решение, и если оно верное, рекурсия останавливается.
Такая простая рекурсия имеет для меня смысл:
/* Given a string, compute recursively (no loops) a new string where all the
* lowercase 'x' chars have been changed to 'y' chars.
*/
public String changeXY(String str) {
if(str.length() == 0)
return str;
if(str.charAt(0) == 'x')
return 'y' + changeXY(str.substring(1));
return str.charAt(0) + changeXY(str.substring(1));
}
Но когда вызов метода ставится как условие оператора if, я не понимаю, как он работает?
Что проверяется? Как определяется, является ли вызов метода истинным, а затем может возвращать true, чтобы остановить рекурсию? Как «сохранить» возможности, чтобы потом возвращаться, если они не верны? Как работает базовый вариант, возвращая сравнение?
/* Given an array of ints, is it possible to choose a group of some of the
* ints, such that the group sums to the given target? This is a classic
* backtracking recursion problem. Rather than looking at the whole array,
* our convention is to consider the part of the array starting at index
* start and continuing to the end of the array. The caller can specify the
* whole array simply by passing start as 0. No loops are needed -- the
* recursive calls progress down the array.
*/
public boolean groupSum(int start, int[] nums, int target) {
if(start >= nums.length)
return target == 0;
if(groupSum(start+1, nums, target - nums[start]))
return true;
if(groupSum(start+1, nums, target))
return true;
return false;
}
Оба кода были взяты из этого github .
Спасибо!