Функция, которая генерирует все слова из n символов, которые могут быть A, B или C - PullRequest
0 голосов
/ 19 января 2020

Нам нужно сделать функцию, которая делает все комбинации из A , B и C с длиной п . Я попытался сделать что-то, я только заставил это работать для 0, 1 и 2, но я не знаю, как сделать это, используя рекурсию или вложенные циклы.

Пример для n=3:

AAA , BAA, CAA, ABA, BBA, CBA, ACA, BCA, CCA, AAB, BAB, CAB, ABB, BBB, CBB, ACB, BCB, CCB, AA C, BA C, CA C, CA AB C, BB C, CB C, A CC, B CC, CCC


def generator (n):

    complete = [ ]

    words = ["A", "B", "C",]

    if (n==1):
        for word1 in words:
            complete.append(word1)
        return complete

    elif (n==0):
        return complete

    else:
        for word1 in words:
            for word2 in words:
                complete.append(word1+word2)

    return complete



n = int(input("Lenght n: "))

complete = (generator(n))

print(', '.join(complete))

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Проблема в логике рекурсии c, вам нужно как-то изменить ее, чтобы правильно представить логику рекурсии c, ниже приведен пример:

    ...
    #produce results for n-1 length so we can use it later
    res=generator(n-1)
    for word1 in words:
            # for each partial result (length n-1) we can generate final result by concatenating current word to it
            for r1 in res:
                complete.append(word1+r1)

Весь код:

def generator (n):

    complete = [ ]

    words = ["A", "B", "C",]

    if (n==1):
        for word1 in words:
            complete.append(word1)
        return complete

    elif (n==0):
        return complete

    else:
        res=generator(n-1)
        for word1 in words:
                for r1 in res:
                    complete.append(word1+r1)

    return complete

и результат для n = 3: (27 строк)

['AAA', 'AAB', 'AAC', 'ABA', 'ABB', 'ABC', 'ACA', 'ACB', 'ACC', 'BAA', 'BAB', 'BAC', 'BBA', 'BBB', 'BBC', 'BCA', 'BCB', 'BCC', 'CAA', 'CAB', 'CAC', 'CBA', 'CBB', 'CBC', 'CCA', 'CCB', 'CCC']
0 голосов
/ 19 января 2020

Решение проблемы в java с использованием рекурсии:

public static void main(String[] args) {
  String str = String.valueOf(words);
  printCombinations(str);
}

private static void printCombinations(String str) {
  printPermutation(str, "");
}

private static void printPermutation(String str, String str2) {
  if (str2.length() == str.length()) {
    //   printing the combination
    System.out.println(str2);
    return;
  }
  for (int i = 0; i < str.length(); i++) {
    printPermutation(str, str2 + str.charAt(i));
  }
}
...