#java
#java
Вопрос:
Я пытаюсь распечатать последовательность, используя рекурсию без цикла. Используя приведенный ниже код, я получаю правильный вывод; однако он переходит от большого к маленькому, и я бы хотел, чтобы он переходил от малого к большому. Что было бы лучшим способом сделать это? В настоящее время я получаю вывод:
22 19 16 13 10
но я бы хотел, чтобы это было отменено.
public class Recursion
{
public static void main(String[] args)
{
sequence(5);
}
public static void sequence(int n)
{
if (n >= 1)
{
int x = ((3*n) 7);
System.out.print(x " ");
sequence(n-1);
}
}
}
Комментарии:
1. Поменяйте
sequence
местами вызовы and .
Ответ №1:
Прямо сейчас вы печатаете вычисленное значение, а затем выполняете рекурсию со следующим (уменьшенным) n-значением, которое выводит следующее значение в последовательности.
Все, что вам нужно сделать, это сначала выполнить рекурсию, а затем вывести текущее вычисленное значение. Это выведет «следующее» значение последовательности, а затем завершит печать только что вычисленного «текущего» значения.
public class Recursion
{
public static void main(String[] args)
{
sequence(5);
System.out.println();
}
public static void sequence(int n)
{
if (n >= 1)
{
int x = ((3*n) 7);
sequence(n-1);
System.out.print(x " "); // changed order of recursive call and print
}
}
}
Ответ №2:
Вы можете использовать сбор и обратный метод, как показано ниже:
public static void main(String[] args) {
List<Integer> sequence = new ArrayList<>();
sequence(5,sequence);
Collections.reverse(sequence);
System.out.println(sequence);
}
public static void sequence(int n, final List<Integer> sequence) {
if (n >= 1) {
int x = ((3 * n) 7);
sequence.add(x);
sequence(n - 1, sequence);
}
}
Вывод:
[10, 13, 16, 19, 22]