[英]using recursion to print symmetric integer sequences that count down and then up
我剛開始通過閱讀一本書並完成練習來自學Java。 本書的一個練習是讓我編寫一個使用遞歸打印對稱整數序列的方法。 例如:
writeSequence(1); //prints 1
writeSequence(2); //prints 1 1
writeSequence(3); //prints 2 1 2
writeSequence(4); //prints 2 1 1 2
writeSequence(5); //prints 3 2 1 2 3
writeSequence(6); //prints 3 2 1 1 2 3
到目前為止,我的解決方案使用了兩種方法實現,看起來並不優雅:
public class Client {
public static void main(String[] args) {
writeSequence(1);
writeSequence(2);
writeSequence(3);
writeSequence(4);
writeSequence(5);
writeSequence(6);
}
public static void writeSequence(int num) {
writeSequence( (int) Math.round(num/2.0), "desc", true);
if (num % 2 == 0) {
writeSequence( (int) Math.round(num/2.0), "asc", true);
} else {
writeSequence( (int) Math.round(num/2.0), "asc", false);
}
}
public static void writeSequence(int num, String direction, Boolean show_one) {
if (num < 1) {
throw new IllegalArgumentException("less than 1");
} else if (num == 1) {
if (show_one) {
System.out.print(1 + " ");
}
} else {
if (direction.equals("desc")) {
System.out.print(num + " ");
writeSequence(num-1, direction, show_one);
} else {
writeSequence(num-1, direction, show_one);
System.out.print(num + " ");
}
}
}
}
我的問題是:如何只使用一個必須只帶一個參數的方法來解決這個問題? 現在,我正在實現兩個方法,但我只想實現一個來解決問題。
這里有一個關於如何只用一個參數編寫一個遞歸方法的提示。
在遞歸方法中,在遞歸調用之前和之后打印您的數字。
我可能正在讀同一本書而且我遇到了這個。 我無法用一種方法做到這一點,但我認為無論如何我都會發布代碼以顯示不同的方式。
public static void writeSequence(int n) {
int num = (int)Math.round(n / 2.0);
String flag = "";
if (n % 2 == 0) {
flag = "even";
} else {
flag = "odd";
}
System.out.println(writeSequence(num, flag));
}
private static String writeSequence(int n, String flag) {
if (n < 1) {
throw new IllegalArgumentException("less than one");
} else if (n == 1 && flag.equals("odd")) {
return "1";
} else if (n == 1 && flag.equals("even")) {
return "1 1";
} else {
return n + " " + writeSequence(n - 1, flag) + " " + n;
}
}
我知道這是一個老帖子,但我只是在praticeit上解決了這個問題,這是我的解決方案
public void writeSequence(int n) {
if (n < 1) throw new IllegalArgumentException();
if (n==1) System.out.print(1);
else if (n==2) System.out.print("1 1");
else {
System.out.print((n+1)/2+ " ");
writeSequence(n-2);
System.out.print(" "+(n+1)/2);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.