Расшифровка по следующему методу
Я решаю тест, который был дан в моем курсе около 2 лет назад, и он получил следующий метод
public static void what(int n,int k,String s){
if(k==0)
System.out.println(s);
else if(n>0){
what(n-1,k,s);
what(n-1,k-1,n+s);
}
}
теперь я запустил его на своей IDE и выяснил, что он печатает все возможные комбинации k ячеек с n числами. Я потратил время и на отладчик, но не могу понять, что за этим стоит.
Я имею в виду, как разработчик, как мне создать такую рекурсию. какова логика позади этого возврата
1 ответ
ОПИСАНИЕ
n = range of elements
k = population of each cell
s = solution so far
if the remaining population is 0
print the solution
else
if there are still elements available, search two cases:
(1) Don't use **n** in the solution; recur.
(2) Do use **n** in the solution;
decrease the population by 1 and recur.
DEBUGGING
Отладчик хорош для поиска проблем логического потока. Для большей картины иногда требуется собрать больше данных для опроса в целом. Вставьте пару операторов печати, чтобы проследить логику, и пусть она выдаст вам строки вывода.
Для функций я рекомендую, чтобы первым оператором была печать для отображения "ENTER", имени функции (в данном случае избыточного) и аргументов. Также печатайте в точках принятия решения: также отслеживайте шаг рекурсии.
След этой рутины
Вот результат, когда я отследил проблему, с отступом 2 пробела для каждого уровня рекурсии:
ENTER 4 3
RECUR without n
ENTER 3 3
RECUR without n
ENTER 2 3
RECUR without n
ENTER 1 3
RECUR without n
ENTER 0 3
RECUR using n
ENTER 0 2 1
RECUR using n
ENTER 1 2 2
RECUR without n
ENTER 0 2 2
RECUR using n
ENTER 0 1 12
RECUR using n
ENTER 2 2 3
RECUR without n
ENTER 1 2 3
RECUR without n
ENTER 0 2 3
RECUR using n
ENTER 0 1 13
RECUR using n
ENTER 1 1 23
RECUR without n
ENTER 0 1 23
RECUR using n
ENTER 0 0 123
123
RECUR using n
ENTER 3 2 4
RECUR without n
ENTER 2 2 4
RECUR without n
ENTER 1 2 4
RECUR without n
ENTER 0 2 4
RECUR using n
ENTER 0 1 14
RECUR using n
ENTER 1 1 24
RECUR without n
ENTER 0 1 24
RECUR using n
ENTER 0 0 124
124
RECUR using n
ENTER 2 1 34
RECUR without n
ENTER 1 1 34
RECUR without n
ENTER 0 1 34
RECUR using n
ENTER 0 0 134
134
RECUR using n
ENTER 1 0 234
234