如果任何人熟悉PracticeIt,那就是我正在做的事情,而且我在遞歸問題集上。我在做這些事情時遇到了麻煩。這裏有一個問題:在java中使用遞歸從單個int參數獲取各種輸出
寫接受的整數參數n
並打印由逗號分隔的第一n
正方形,與按降序排列,接着以升序甚至正方形奇數平方的方法writeSquares
。下表列出了幾個電話的方法和他們的預期輸出:
writeSquares(5); ----> Output: 25, 9, 1, 4, 16
writeSquares(1); ----> Output: 1
我每天花幾個小時過去3天內搞清楚遞歸,但我就是想不通。 任何人都可以指向正確的方向嗎?
我的代碼如下所示:
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);
}
編輯:Woops我固定下面
的代碼和設置其他問題的另一個問題是:
編寫接受一個整數的方法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
單數。 另外一個問題 - 是否可以用單一方法做到這些?
謝謝你的時間。我學校的導師不是很有幫助,我的同學也不是。
您是否需要使用遞歸? – Bohemian 2014-11-09 14:05:38