Это называется возвращением. Ищите в Википедии об этом. Вы можете сделать это как рекурсивно, так и итеративно.
Амир, он хочет от 0 до i + 1, а не от 0 до i. И я думаю, что передача массивов в стеке медленнее, чем доступ к ним как к глобальному.
Я думаю, вы хотите что-то вроде этого:
int a[YOUR_LENGTH];
void backtracking (int n, int counter) {
if (counter == n) {
// do whatever
return;
}
for (int j = 0; j <= counter + 1; ++ j) {
a[counter] = j;
backtracking(n, counter + 1);
}
}