Permutação de um array, com repetição, em Java

Existem algumas perguntas semelhantes no site que foram de alguma ajuda, mas eu não consigo resolver esse problema, então espero que isso não seja repetitivo.

Esta é uma tarefa de casa onde você tem um conjunto de caracteres [A, B, C] e deve usar recursão para obter todas as permutações (com repetição). O código que eu tenho meio que faz isso:

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);    
}

No entanto, o parâmetro n deve definir o tamanho da saída, portanto, embora essa função imprima todas as permutações de comprimento 3, não pode ser de comprimento 2. Eu tentei tudo o que posso pensar e me deparei com os resultados de pesquisa do Google. e eu sou agravado comigo mesmo por não ser capaz de resolver o que parece ser um problema bastante simples.

questionAnswers(4)

yourAnswerToTheQuestion