|
|||
global count. if valid(word): count += 1. return. rec( word+c, k, Alpha ). rec( , 3, ШКОЛА ). print( count ). return word.count('К') == 1. return word.count('К') == 1. if valid(word): return 1. return 0. count += rec( word+c, k, Al ⇐ ПредыдущаяСтр 2 из 2 global count if len(word) == k: if valid(word): count += 1 return for c in Alpha: rec( word+c, k, Alpha ) 3) функция rec принимает три параметра: уже построенную часть слова word, заданную длину слов k и алфавит Alpha 4) если длина слова word равна k, слово полностью построено; проверяем его функцией valid, которая возвращает True, если слово подходящее; 5) если слово удовлетворяет требованиям, увеличиваем глобальную переменную count (счётчик подходящих слов) 6) если слово ещё не достроено (его длина меньше k) в цикле добавляем в конец слова по очереди все буквы из алфавита и вызываем процедуру rec рекурсивно 7) основная программа выглядит так: count = 0 rec( "", 3, "ШКОЛА" ) print( count ) в начальный момент первый аргумент – пустая строка (ещё ни одна буква не выбрана) 8) функция valid в данной задаче должна проверять, верно ли, что слово содержит ровно одну букву К: def valid( word ): return word.count('К') == 1 конечно, в другой задаче функцию valid нужно изменить в соответствии с условием 9) Ответ: 48. Решение (с помощью программы c функцией): 1) можно организовать рекурсивный перебор с помощью функции, которая будет возвращать количество найденных слов: def valid( word ): return word.count('К') == 1 def rec( word, k, Alpha ): if len(word) == k: if valid(word): return 1 return 0 count = 0 for c in Alpha: count += rec( word+c, k, Alpha ) return count print( rec( "", 3, "ШКОЛА" ) ) Домашнее задание. 1.
2.
|
|||
|