public static void recursion(int lo, int current, int hi){
if(current != hi){
System.out.printf("%d ", current);
recursion(lo, current+1, hi);
}
System.out.printf("%d%c", current, current == lo ? '\n' : ' ');
}
Этот метод может распечатать строку чисел, как у вас. Требуется начальная точка (lo), текущая позиция в списке (текущая) и максимальное число (hi).
Рекурсивный базовый случай (когда мы больше не хотим использовать рекурсию) - это когда current == hi
. Распечатаем номер, потом возвращаемся.
Все остальные значения печатают текущий, рекурсивный, а затем печатают снова после завершения рекурсии.
Это решение имеет дополнительное преимущество - печатать пробел после каждого символа, кроме последнего номера. Без пробела:)
Первоначальный вызов этого метода будет выглядеть следующим образом:
recursion(0, 0, 5); //prints 0 -> 5 -> 0
recursion(0, 5, 5); //prints 5 -> 0
recursion(0, 1, 5); //prints 1 -> 5 -> 0
recursion(0, 6, 5); //counts up forever and eventually crashes
Некоторый полезный метод, упрощающий вызов для общих целей, можно сделать примерно так:
public static void countUpFromZeroDownToZero(int max){
recursion(0, 0, max);
}
public static void countFromXToYToX(int lo, int hi){
recursion(lo, lo, hi);
}