Самый простой способ - просто свернуть его в цикл for:
for(i=0; i<pow(n, r); i++) {
}
Однако это может затруднить доступ к счетчикам циклов, если они вам нужны, но это можно сделать математически. Например, значение переменной счетчика внутреннего цикла определяется как:
int c = i % n;
Вы можете иметь массив таких счетчиков и определять значения с помощью аналогичных уравнений, или вы можете просто увеличивать их при необходимости, например ::
.
void iterate(int r, int n) {
int i, rc, *c = malloc(sizeof(int) * r);
memset(c, 0, sizeof(int) * r);
for(i = 0; i < pow(n, r); i++) {
// code here, using loop counters in the 'c' array, where c[0] is counter
// for the outer loop, and c[r - 1] is the counter for the innermost loop
// update the counters
rc = r;
while(rc > 0) {
rc--;
c[rc]++;
if(c[rc] == n) {
c[rc] = 0;
} else {
break;
}
}
}
free(c);
}