Member 12885549 Ответов: 1

Как написать серый код в рекурсии java


public class GrayCode {

// append reverse of order n gray code to prefix string, and print
public static void yarg(String prefix, int n) {
if (n == 0) StdOut.println(prefix);
else {
gray(prefix + "1", n - 1);
yarg(prefix + "0", n - 1);
}
} 

// append order n gray code to end of prefix string, and print
public static void gray(String prefix, int n) {
if (n == 0) StdOut.println(prefix);
else {
gray(prefix + "0", n - 1);
yarg(prefix + "1", n - 1);
}
} 


public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
gray("", n);
}

}


Может ли кто-нибудь объяснить, как работает этот код?

Что я уже пробовал:

Я пытался написать метод для серого кода, и мой путь был очень несовершенным, много циклов и списков. Гораздо лучше использовать рекурсию, и я нашел этот пример, но я не совсем уверен, знаю ли я, как это работает.

Patrice T

Что он выводит ?
Серый код-Википедия[^]

1 Ответов

Рейтинг:
4

Patrice T

Отладчик-отличный инструмент для понимания чужого кода.Если выводом является серый код, то именно это и делает код. Изучите серый код.
Серый код-Википедия[^]

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.
Обратите внимание, что перечисление серого кода не сложнее, чем перечисление двоичного числа по порядку, к нему просто нужно добавить небольшой шаг. рекурсия не нужна.
-----
Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.