Перестановка массива с повторением в Java

На сайте есть несколько похожих вопросов, которые мне помогли, но я не могу точно решить эту проблему, поэтому надеюсь, что это не повторяется.

Это домашнее задание, в котором у вас есть набор символов [A, B, C], и вы должны использовать рекурсию для получения всех перестановок (с повторением). Код, который у меня есть, делает это:

char[] c = {'A', 'B' , 'C'};

public void printAll(char[] c, int n, int k) {
    if (k == n) {
      System.out.print(c);
      return;
    }
    else {   
      for (int j = 0; j<n; j++) {
        for (int m = 0; m<n; m++) {
           System.out.print(c[k]); 
           System.out.print(c[j]); 
           System.out.print(c[m] + "\r\n");
        }
      }
    }        
    printAll(c, n, k+1);    
}

Однако параметр n должен определять длину вывода, поэтому, хотя эта функция печатает все перестановки длины 3, она не может делать их длины 2. Я перепробовал все, что мог придумать, и изучил результаты поиска Google, и я раздражен тем, что не смог решить то, что кажется довольно простой проблемой.

Ответы на вопрос(3)

Ваш ответ на вопрос