java - 在java中使用递归从单个int参数获得多种输出

标签 java recursion

如果有人熟悉 PracticeIt,这就是我正在做的事情,而且我正在研究递归问题集。我在做这些事情时遇到了困难。这里有一个问题:

编写一个方法writeSquares,它接受整数参数n并打印以逗号分隔的前n个方格,其中奇数为方格按降序排列,偶数方格按升序排列。下表显示了对该方法的多次调用及其预期输出:

   writeSquares(5); ----> Output: 25, 9, 1, 4, 16 
   writeSquares(1); ----> Output: 1

在过去的三天里,我每天都花几个小时来弄清楚递归,但我就是无法弄清楚。 谁能指出我正确的方向?

我的代码如下:

public static void writeSquares(int n)
{
    if(n<1)
        throw new IllegalArgumentException();
    else{
        if(n%2==0){
            System.out.print((n-1)*(n-1));
            writeSquares2(n-1, n-1, "down");
        }
        else{
            System.out.print(n*n);
            writeSquares2(n-1, n-1, "down");
        }
    }
}

public static void writeSquares2(int n, int m, String s)
{
    if(m==0){
        return;
    }

    String ss = s;

    if(n<=1){
        ss = "up";}

    if(n%2==1&&s=="down"){
        System.out.print(", " + n*n);
        writeSquares2(n-2,m-1,ss);
    }
    if(n%2==0&&s=="down"){
        writeSquares2(n-1,m-1,ss);
        System.out.print(", " + n*n);
    }
    if(n%2==1&&s=="up"){
        System.out.print(", " + n*n);
        writeSquares2(n+2,m-1,ss);
    }
    if(n%2==0&&s=="up"){
        writeSquares2(n+1,m-1,ss);
        System.out.print(", " + n*n);
    }

编辑:糟糕,我修复了下面的代码

另一个问题集中的另一个问题是:

编写一个方法writeSequence,该方法接受整数n作为参数,并打印由整数降序排列的n数字组成的对称序列以 1 结尾,后跟以 1 开头的升序整数,如下表所示:

  writeSequence(9);     -----> 5 4 3 2 1 2 3 4 5
  writeSequence(10);    -----> 5 4 3 2 1 1 2 3 4 5

我的代码:

public void writeSequence(int n)
{
    if(n<1)
        throw new IllegalArgumentException();
    else
        writeSequence2(n, n, "down"); //I actually dont need the second parameter
}

    public void writeSequence2(int n, int m, String s)
    {
        String ss = s;
        if(n/2-1==1)
            ss = "up";

        if(n==1)
            System.out.print(n);


        else if(ss.equals("down")){
            if(n%2==0){
                System.out.print(n/2+" ");
                writeSequence2(n-1, m-1, ss);
            }
            else if(n%2==1){
                writeSequence2(n-1, m-1, ss);
                System.out.print(" "+ (n/2+1));
            }

        }

        else if(ss.equals("up")){
            if(n%2==0){
                System.out.print(n/2+" ");
                writeSequence2(n-1, m-1, ss);
            }
            else if(n%2==1){
                writeSequence2(n-1, m-1, ss);
                System.out.print(" " + (n/2+1));
            }
        }
    }

对于第二个,我的代码有些正确。除非 n 为奇数。 还有另一个问题 - 是否可以仅使用单一方法来完成这些操作?

感谢您的宝贵时间。我学校的导师和我的同学都不太乐于助人。

最佳答案

public void writeSequence(int n){
    if( n < 1){
        throw new IllegalArgumentException();
    }
    if(n==1){
        System.out.print(n);
    }
    else if(n==2){
        System.out.print(n/2 +" " + n/2);
    }
    else if(n%2 ==0){
        System.out.print(n/2 +" ");
        writeSequence(n-2);
        System.out.print(" " +n/2);
    }
    else if(n%2 ==1){
        System.out.print( (n/2+1) +" ");
        writeSequence(n-2);
        System.out.print( " "+(n/2 +1));
    }
}

关于java - 在java中使用递归从单个int参数获得多种输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26826254/

相关文章:

java - 无法使用字符串作为选项卡名称

java - 打开新 JFrame 时停止音乐

c - 自由(): invalid next size (fast) error in C using recursion

c++ - 从元组函数一次存储 2 个变量

java - 读取 Hibernate 实体标识值

java - LWJGL 的透明度问题

javascript - Firebase onAuthStateChanged 退订递归

javascript - 递归函数数组到字符串javascript

sql - 递归查询中不允许使用聚合函数。是否有其他方法来编写此查询?

java - javax.servlet.http.Part 代表什么?