я хочу напечатать серию с использованием рекурсии в java - PullRequest
0 голосов
/ 13 апреля 2020

Вы должны напечатать шаблон, используя рекурсию. При заданном входе N шаблон выглядит так: N, a i, a i + 1, a i + 2, ....., N. Где, если a i> 0, то a i + 1 = a i - 5, иначе a i + 1 = a i + 5. Это будет убывающая последовательность от N до a i <= 0, а затем возрастающая последовательность до N. (См. Примеры тестовых случаев для лучшего объяснения) </p>

Формат ввода Первая строка содержит целое число T, обозначающее количество тестовых случаев. Для каждой из следующих T строк каждая строка содержит целое число N.

Формат вывода. Для каждого теста в новой строке выведите требуемый шаблон.

Ограничения 1 <= T <= 6 </p>

0 <= N <= 2000 </p>

Пример ввода

2

16

10

Вывод

16 11 6 1 -4 1 6 11 16

10 5 0 5 10

Пример пояснения к тестовому примеру Для первого тестового примера N = 16 это будет убывающая последовательность, пока номер печати не станет <= 0. 16 11 6 1 −4 После этой точки будет увеличиваться последовательность до тех пор, пока номер печати не станет N 1 ​​6 11 16 Таким образом, шаблон будет 16 11 6 1 −4 1 6 11 16. </p>

Мой код ниже но я получил результат как 16,11,6,1, -4 только. Помогите мне исправить этот код

import java.util.Scanner;
public class Day3
{  
public static void series(int n,boolean b)
{
    int temp = n;
    boolean flag=b;
    System.out.println(temp+" ");
    if(flag==true)
        temp-=5;
    else if(flag==false)
        temp+=5;
    if(temp<=0)
        flag=false;
    if(temp<=n)
        series(temp,flag);
}
public static void main(String args[])
{
    Scanner sc = new Scanner(System.in);
    int t = sc.nextInt();
    while(t>0)
    {
        int n = sc.nextInt();
        series(n,true);
        t-=1;
    }
}
}

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Потому что 'n' меняется в каждом случае. Вы должны создать другую переменную и оставить в ней первую букву 'n' для контроля, если temp меньше 'n'.

Например

import java.util.Scanner;
public class Day3
{  

int firstN = 0; //added that line

public static void series(int n,boolean b)
{
    int temp = n;
    boolean flag=b;
    System.out.println(temp+" ");
    if(flag==true)
        temp-=5;
    else if(flag==false)
        temp+=5;
    if(temp<=0)
        flag=false;
    if(temp<=firstN) //changed that line
        series(temp,flag);
}
public static void main(String args[])
{
    Scanner sc = new Scanner(System.in);
    int t = sc.nextInt();
    while(t>0)
    {
        int n = sc.nextInt();
        firstN = n; //added that line
        series(n,true);
        t-=1;
    }
}
}

Также небольшой совет;

вы можете использовать (flag) для (flag==true)

и (!flag) для (flag==false)

0 голосов
/ 13 апреля 2020

Только к сведению: Хотя это можно решить с помощью рекурсии, это можно решить более эффективно без использования рекурсии. Это так просто:

private static void printSeries(int N) {
      int T = N;
      while ( T >= 0 ) {
        System.out.print(T +  " ");
        T = T - 5;
      }
      while ( T <= N ) {
         System.out.print(T +  " ");
        T = T + 5;
      }
    }
...