Изменение порядка последовательности

#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. Поменяйте print 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]