首页 > 解决方案 > 我想在java中使用递归打印一个系列

问题描述

您必须使用递归打印模式。给定一个输入 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 。(请参阅示例测试用例以获得更好的解释)

输入格式 第一行包含一个整数 T,表示测试用例的数量。对于接下来的 T 行中的每一行,每一行都包含一个整数 N 。

输出格式 对于新行上的每个测试用例,打印所需的模式。

约束 1 <= T <= 6

0 <= N <= 2000

示例输入

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。

我的代码在下面,但我得到的输出仅为 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;
    }
}
}

标签: javarecursionseries

解决方案


因为'n'在每种情况下都会发生变化。您必须创建另一个变量并在其中保留第一个“n”,以控制温度是否小于“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)


推荐阅读