Нашел интересный алгоритм перебора, но так и не могу понять, как он работает. Пожалуйста, поясните.
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;
    }

}