Страницы

Поиск по вопросам

понедельник, 14 января 2019 г.

Как запустить заданное количество вложенных циклов без рекурсии

допустим есть функция void cicl(){ for(...){ for(...){ ` for(...){ cout << "работает вложенных три цикла" << endl; } `} } } а если надо такую функцию которая создает 10000 вложенных циклов. void cicl(unsigned int num_cicle=10000){ // не будем же мы здесь писать 10000 вложенных циклов } как осуществить такое не прибегая к рекурсии?


Ответ

Если нужно организовать вложеные циклы, то нужен только массив для хранения индексов. Пусть нужно n вложенных циклов, но максимальное значение - m. #include #include
using namespace std;
int main() { const int n = 3; const int m = 4; int ind[n] = {0}; int c = pow(m,n); // степень, может быть вычислена сразу. for (int i = 0; i < c; i++) { // это такое тело цикла - вывод индеков for (int j = 0; j < n; j++) { std::cout << ind[j] << " "; } std::cout << std::endl;
// ключевая часть - обновим индексы for (int j = 0; j < n; j++) { ind[j]++; if (ind[j] < m) break; ind[j] = 0; }
} return 0; } Если индексы должны быть разные, то нужен ещё один массив индексов и проверки должны быть не с m, а с элементами этого массива. У этого кода есть много недостатков, к примеру, можно от параметра цикла i избавиться (при больших вложенности может быть переполнение). Но это легко при желании доработать. Также, возможно, нужно будет использовать вектор. Но не буду же я весь код за Вас делать:) По факту - это идентично обычной позиционной системе счисления.

Комментариев нет:

Отправить комментарий