Понимание порядка выполнения и возврата при рекурсивной генерации подмножестваJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Понимание порядка выполнения и возврата при рекурсивной генерации подмножества

Сообщение Anonymous »

Я пытаюсь понять, как работают рекурсия и возврат в следующем методе Java, который печатает все подмножества строки. Я понимаю базовый случай, когда печатается idx == s.length() и текущее значение ans.
Однако меня смущает то, что происходит после возврата базового случая. Например, когда печатается "abc", я не понимаю, как дальше печатается "ab". Меня смущает то, как управление возвращается к предыдущему рекурсивному вызову и почему значение ans снова становится «ab» вместо того, чтобы оставаться «abc».
Мне нужно пошаговое объяснение пробного прогона, в котором основное внимание уделяется тому, как локальные переменные (ans и idx) ведут себя во время рекурсивных вызовов и возвратов.
Вот код:
static void subset(String ans, String s, int idx) {
if (idx == s.length()) {
System.out.println(ans);
return;
}

char ch = s.charAt(idx);

// take the character
subset(ans + ch, s, idx + 1);

// do not take the character
subset(ans, s, idx + 1);
}


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

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

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

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

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

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