Расшифровка по следующему методу

Я решаю тест, который был дан в моем курсе около 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
Другие вопросы по тегам