Страницы

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

четверг, 2 января 2020 г.

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

#циклы #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 с использованием стека. не на С++, но Явное использование стека

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

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