Нашел интересный алгоритм перебора, но так и не могу понять, как он работает. Пожалуйста, поясните.
public class TestNotMySort {
public static void main(String[] args) {
for (int r = 1; r <= 3 ; r++) {
proc(0, 1, r);
}
}
//рекурсивно перебираем все числа.
// numb - число старшего разряда
// first - наименьшая цифра для текущего разряда;
// digPos - ЧИСЛО РАЗРЯДОВ, текущий разряд, позиция цифры в числе;
private static void proc(long numb, int first, int digPos){
for (int i = first; i < 10; i++){
long number = i * pow(10, digPos - 1) + numb;
System.out.println(number + ": numb этого числа " + numb +", first этого числа - " + first +", digPos - "+ digPos);
if (digPos > 1) {
proc(number, i, digPos - 1);
};
}
}
// возведение в степень exp числа num
public static long pow (int num, int exp) {
long l = 1;
for (int i = 0; i < exp; i++)
l *= (long)num;
return l;
}
}package com.javarush.task.task20.task2025;
//import org.junit.Test;
//import static org.junit.Assert.assertArrayEquals;
public class Testing {
/*
@Test
public void test100() {
assertArrayEquals(Solution.getNumbers(7), new long[]{1L, 2L, 3L, 4L, 5L, 6L});
assertArrayEquals(Solution.getNumbers(100), new long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L});
assertArrayEquals(Solution.getNumbers(407), new long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 153L, 370L, 371L});
assertArrayEquals(Solution.getNumbers(1000), new long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 153L, 370L, 371L, 407L});
assertArrayEquals(Solution.getNumbers(100000), new long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 153L, 370L, 371L, 407L,
1634L, 8208L, 9474L, 54748L, 92727L, 93084L});
assertArrayEquals(Solution.getNumbers(100000000), new long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 153L, 370L, 371L, 407L,
1634L, 8208L, 9474L, 54748L, 92727L, 93084L, 548834L, 1741725L, 4210818L, 9800817L, 9926315L,
24678050L, 24678051L, 88593477L});
}
*/
}