Java 将迭代循环转换为递归方法

Java 将迭代循环转换为递归方法,java,recursion,iteration,Java,Recursion,Iteration,我得到了两次编写函数的练习,一次递归,一次迭代,这将产生以下输出: private static void printSequence(int n) printSequence(3); 1 12 123 12 1 我的迭代解决方案如下: for (int i = 1; i < 2 * n; i++) { for (int j = 1; j <= (i > n ? 2 * n - i : i); j++) { System.out.print(j);

我得到了两次编写函数的练习,一次递归,一次迭代,这将产生以下输出:

private static void printSequence(int n)

printSequence(3);

1
12
123
12
1
我的迭代解决方案如下:

for (int i = 1; i < 2 * n; i++) {
    for (int j = 1; j <= (i > n ? 2 * n - i : i); j++) {
        System.out.print(j);
    }
    System.out.println();
}
for(int i=1;i<2*n;i++){
对于(intj=1;jn?2*n-i:i);j++){
系统输出打印(j);
}
System.out.println();
}
迭代方法非常简单,但我不知道如何将其作为递归调用处理

关于如何解决这个问题有什么建议吗


编辑:由于单元测试,方法签名是固定的

您的代码应该如下所示

public static void main(String[] args) {
    recusiveFunction(1,10); // First parameter is the iteration number and 2 is total times.
}

private static void recusiveFunction(int iteration ,int total) {
    String str="";
    for(int i=1;i<=iteration;i++){ // this loops creates what it needs to print 1 or 12 or 123
        str+=i;
    }
    if(iteration<total/2){
        System.out.println(str);
        recusiveFunction(++iteration,total);
    }
    System.out.println(str);
}
它的工作原理是,我们将字符串存储在一个我们想要打印的变量中,但我们一直在调用函数,并且当迭代少于一半时,字符串将递增。然后,当它达到一半时,它开始返回堆栈跟踪,因此它以递减的顺序给我们返回输出


编辑: 正如上面所说,我们稍微修改了代码,使其完全没有循环:

public static void main(String[] args) {
    recusiveFunction(1,10,"");
}

private static void recusiveFunction(int iteration ,int total, String str) {
    str+=iteration;
    if(iteration<total/2){
        System.out.println(str);
        recusiveFunction(++iteration,total,str);
    }
    System.out.println(str);
}

替代方法:

public class Main {
    private  static int iteration=1;
    private  static String str ="";

    public static void main(String[] args) {
        printSequence(10);
    }

    private static void printSequence(int total) {
        if(iteration<=total){
            str+=iteration;
            System.out.println(str);
            iteration++;
            printSequence(total);
        }
        if(2*total - iteration >0) {
            str = str.substring(0, 2 * total - iteration);
            iteration++;
            System.out.println(str);
        }
    }
}

提示:您的主要递归方法如下所示

void recursiveMethod(int iter, int max){
    if iteration<max
        print 1..iter
        recursiveMethod(iter+1, max)
        print 1..iter
    else
        print 1..iter
}
我们应该处理打印

1
..
1
但也将调用递归方法(iter+1,max),该方法将填充
部分

12
..
12
以此类推,直到我们只需要打印的情况下,
iteration==max

123..max

您可以创建两种递归方法,一种是在一行中打印数字,另一种是递归打印第一行和最后一行(取决于输入)。提示:要打印第一行,调用子程序填写中间,然后打印最后一行。然后,子例程与主方法完全相同。您正在使用循环。我想说,这个练习的目的是学习将循环重写为递归方法。@Pshemo该循环仅用于构造要显示的字符串。因此,将其重写为递归方法应该相当容易:)方法签名是固定的,它通过某种单元测试框架进行测试,因此我无法更改它。。。私有静态void printSequence(intn)无论如何,我不希望在您的答案中包含它,以避免发布现成的解决方案。最好将其隐藏为注释,让其他人自己花一些时间来改进甚至重写您的答案(我认为这是一个很好的练习)。这是我解决问题的方法,但我无法向方法签名添加参数,因为单元测试会检查我的答案code@chamm就像我在书中说的,您只需在具有固定签名的方法中调用此递归方法。只需在开始时将
iter
设置为
1
,并让
max
be
n
。换句话说,使用
private static void printSequence(int n){recursiveMethod(1,n);}
        print 1..iter
        recursiveMethod(iter+1, max)
        print 1..iter
1
..
1
12
..
12
123..max