Изменение значения Java в рекурсивном режимеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Изменение значения Java в рекурсивном режиме

Сообщение Anonymous »

Я задаю вопрос по лит-коду, меня немного смущает изменение значений в рекурсивной функции. Вот мой код:

Код: Выделить всё

private void backtrack (int[] nums, int index, int currOR, int maxOR, int count){
if (currOR == maxOR) count++;

for (int i = index; i < nums.length; i++) {
backtrack(nums, i + 1, currOR | nums[i], maxOR, count);
}
}

public int countMaxOrSubsets(int[] nums) {
int maxOR = 0;
for (int num : nums) {
maxOR |= num;
}

int count = 0;
backtrack(nums, 0, 0, maxOR, count);
return count;
}
Во время рекурсивного процесса счетчик не может поддерживать значение. В каждой рекурсивной операции примитивное значение будет установлено обратно в 0. Если я хочу сохранить значение, мне нужно изменить счетчик на массив, который является ссылочным значением. Он работает с приведенным ниже кодом:

Код: Выделить всё

private void backtrack (int[] nums, int index, int currOR, int maxOR, int[] count){
if (currOR == maxOR) count[0]++;

for (int i = index; i < nums.length; i++) {
backtrack(nums, i + 1, currOR | nums[i], maxOR, count);
}
}

public int countMaxOrSubsets(int[] nums) {
int maxOR = 0;
for (int num : nums) {
maxOR |= num;
}

int[] count = new int[1];
backtrack(nums, 0, 0, maxOR, count);
return count[0];
}
Или я могу установить для счетчика глобальное значение, что тоже работает. Я знаю, что это связано с разницей в примитивном значении Java и ссылочном значении, но я не понимаю основную причину (может быть, это связано с поведением JVM?). Может ли кто-нибудь дать мне удар? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -recursive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»