Как реализовать вызов циклов for внутри самих себя необходимое количество раз через рекурсию

Друзья, написал такую функцию перебора натуральных чисел, на вход которой подается число, определяющее до какого разряда будет перебор, то есть если на вход 3, то перебор будет от 1 до 999.

public class Solution3 {
public static void doAlgorithm(int howManyDigitInLine) {

    for (int c = 1; c <= 9; c++) {
        System.out.println(c + " ");
        for (int k = c; k <= 9; k++) {
            System.out.println(c + " " + k);
            for (int v = k; v <= 9; v++) {
                System.out.println(c + " " + k + " " + v);

            }
        }
    }
}

public static void main(String[] args) {
    doAlgorithm(3);
}}

суть алгоритма в том что он исключает из перебора повторы комбинаций - если было число 123, то в перебор уже не попадают числа 321 213 231 вывод будет такой: 1 11 111 112 113 114 115 116 117 118 119 12 122 123 124 125 126 127 128 129 13 133 и так до 999

но сейчас тут параметр который подается в эту функцию никак не работает, потому что я написал 3 вложенных цикла вручную, то есть если дописать еще один вложенный цикл for вручную, то получится перебор до 9999, но мне нужно, чтобы естественно работало в зависимости от параметра на входе, я пытался сделать рекурсией и пробовал примерно такое:

public class Solution2 {
static String result1 = "";

public static void recursionEnumeration(int xx, int counter) {
    if (counter == 0) {
    result1 = "";
    }
    for (int xx1 = xx; xx1 <= 9; xx1++) {
        result1 += "" + xx1;
        String result2 = result1;
        //System.out.println(xx + " " + xx1);
        if (counter != 0) {
            recursionEnumeration(xx1, counter - 1);
        }
        System.out.println(result1);
        result1 = result2;
    }
}


public static void main(String[] args) {
    recursionEnumeration(1, 2);

}}

но на выходе как не пытался - получаю совсем не то. Если кто-то может, подскажите, пожалуйста, возможно ли это сделать рекурсией и каким образом, или может есть другой способ.. хотя бы направьте в нужное русло..


Ответы (2 шт):

Автор решения: Дмитрий
public static void doAlgorithm(int howManyDigitInLine) {
    int limit =(int) Math.pow(10,howManyDigitInLine);
    for (int i = 1; i < limit; i++) {
        System.out.println(i);
    }    
}
→ Ссылка
Автор решения: Aziz Umarov

Рекурсией сделать можно.

int stopRecurtion = 9999;

Давайте определим функцию.

public void recurtionEnumeration(int prefix, startIndex){

for(index = startIndex; index<=9; index++) { If ((prefix*10 + index) > stopRecurtion) return; System.out.println(prefix * 10 + index); recurtionEnumeration (prefix*10 + index, index); } }

Извиняюсь за оформление набираю с телефона

→ Ссылка