допустим есть функция void cicl(){ for(...){ for(...){ ` for(...){ cout << "работает вложенных три цикла" << endl; } `} } } а если надо такую функцию которая создает 10000 вложенных циклов. void cicl(unsigned int num_cicle=10000){ // не будем же мы здесь писать 10000 вложенных циклов } как осуществить такое не прибегая к рекурсии?
Ответ
Если нужно организовать вложеные циклы, то нужен только массив для хранения индексов.
Пусть нужно n вложенных циклов, но максимальное значение - m.
#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 избавиться (при больших вложенности может быть переполнение). Но это легко при желании доработать. Также, возможно, нужно будет использовать вектор. Но не буду же я весь код за Вас делать:)
По факту - это идентично обычной позиционной системе счисления.
Комментариев нет:
Отправить комментарий