Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 17.05.2015
Сообщений: 2

Печать всех возможных комбинаций через рекурсию

17.05.2015, 04:40. Показов 2931. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните, пожалуйста, как работает этот код:

Python
1
2
3
4
5
6
def words(letters, word=''):
    letters or print(word)
    for letter in letters:
        words(letters - {letter}, word + letter)
 
words(set('catdog'))
Я так понимаю, что после первого прохода всех циклов for мы получаем
Python
1
words({}, word = 'catdog')
, которая затем принтит слово 'catdog' в рандомнйо последовательности символов на экран. А что дальше? Почему этот код продолжает работать и принтит каждую из возможных комбинаций?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.05.2015, 04:40
Ответы с готовыми решениями:

Перебор всех возможных комбинаций
Доброго дня. Есть задание, написать брутфорс, по заданному алфавиту. То что представлено ниже, вроде успешно работает, но с 1...

Функция вывода всех возможных комбинаций данных
Дан список z = Как сделать функцию, которая будет выводить возможные комбинации, начиная с 0:

Генерация всех возможных комбинаций элементов заданного множества за наименьшее количество транспозиций элементов
Есть код на паскале, но я не понимаю, что не так переписал... def third_order(n): p = c = pr = for i in...

3
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
17.05.2015, 12:17
Цитата Сообщение от Ozon1 Посмотреть сообщение
после первого прохода всех циклов for
Tут нет "первого прохода", функция words будет "откусывать" по 1-й букве во всех возможных комбинациях, потому как for letter in letters: будет выполняться для каждого остатка:
Python
1
2
3
4
5
for l1 in letters:
    for l2 in letters - {l1}:
        for l3 in letters - {l2}:
...
                        for l6 in letters - {l5}:
NOTE: letters - {l1} для иллюстрации. В коде так делать нельзя: сначала надо создать новое множество с -1 элемент, так как изменение итерируемого объекта недопустимо.

2all Кстати, вот пример рекурсии, которую сложно заменить циклом. Кто предложит вариант?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
17.05.2015, 18:20
Python
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
 
import itertools
 
def rotate(word):
    for p in itertools.permutations(word, len(word)):
        print("".join(p))
 
rotate("catdog")
1
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
17.05.2015, 21:22
Цитата Сообщение от Marinero Посмотреть сообщение
Кстати, вот пример рекурсии, которую сложно заменить циклом. Кто предложит вариант?
Так просто вместо встроенного стека можно использовать свой - и всё.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2015, 21:22
Помогаю со студенческими работами здесь

Найти количество возможных комбинаций лесенок через рекурсию
Не пойму вообще как сделать. Вводится число н, выводится количество возможных комбинаций. Лесенка состоит из кубиков. Ниже привел примеры....

Введенное число с клавиатуры разложить на сумму всех возможных чисел (сделать через рекурсию).
Введенное число с клавиатуры разложить на сумму всех возможных чисел (сделать через рекурсию). Например: 5=2+3; 5=1+4 и т.д. #include...

Сортировка всех возможных комбинаций 4 из 8
Задача состоит в том, что бы сложить 4 элемента массива, который состоит из 8 элементов, во всех возможных комбинациях int array; //...

Генератор всех возможных комбинаций
Нужно написать генератор всех возможных комбинаций, допустим состоящих из 2-х, 3-х, 4-х символов и сохраняющих комбинации в файл, вот...

Вывод всех возможных комбинаций
Здравствуйте! Определена строка русским алфавитом, необходимо вывести все возможные комбинации слов для данного алфавита длиной 4, при этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru