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