gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:40:59 25 4
gpt4 key购买 nike

如果有人熟悉 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com