Member 14035676 Ответов: 3

Создание всех подмножеств рекурсивно без использования массива на языке Си


Мы получаем от пользователя неотрицательное целое число n и должны вывести все подмножества множества ({1,2,3,...,n}).

например, для n=3 мы должны вывести:

{1 , 2 , 3}
{1 , 2}
{1 , 3}
{1}
{2 , 3}
{2}
{3}
{}
,s являются необязательными, и последовательность может быть напечатана без какой-либо запятой. (например, {1 2 3}) Я должен добавить, что последовательность подмножеств должна быть точно такой же, как в примере. То есть сначала подмножества, имеющие 1, затем подмножества, имеющие 2 и .... Сначала должно быть напечатано самое длинное подмножество.

Что я уже пробовал:

Я вижу много кодов в Интернете, которые решают эту проблему с помощью массивов или с помощью битового массива, указывающего, используем ли мы число или нет. Проблема в том, что в этом вопросе нам не разрешается использовать-любой - тип массива или другие структуры данных ,такие как вектор и т. д. Даже использование поведения массива чего - то вроде string полностью запрещено. Она должна быть решена только с помощью рекурсии.

Нам также не разрешается использовать какие-либо дополнительные функции. Например, если мы пишем его с помощью C, нам разрешено использовать только stdio.h или для C++, только <iostream> разрешена и никакая другая библиотека.

Я не знаю, как это сделать без каких-либо массивов. Как проверить, какой номер он должен напечатать, и в то же время управлять {}.

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я вижу много кодов в Интернете, которые решают эту проблему с помощью массивов или с помощью битового массива, указывающего, используем ли мы число или нет. Проблема в том, что в этом вопросе нам не разрешается использовать-любой - тип массива или другие структуры данных ,такие как вектор и т. д.

Поскольку любая переменная также является битовым массивом, не существует решения при соблюдении всех ограничений.
Цитата:
Я не знаю, как это сделать без каких-либо массивов.

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

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.


Рейтинг:
0

KarstenK

Вы должны написать код для функции, которая выводит фактические данные, а затем рекурсивно вызвать эту функцию для всех подмножеств, в которых один пункт удаляется.

Но как вы можете хранить эти данные? Если сомневаетесь, спросите своего учителя!!!


Рейтинг:
0

OriginalGriff

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

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

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Member 14035676

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

OriginalGriff

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