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