本を読んだり演習を行ったりして、独学で Java を学び始めたところです。本の演習の 1 つは、再帰を使用して対称整数シーケンスを出力するメソッドを作成するように求めています。例えば:
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
これまでのところ、私のソリューションは 2 つのメソッドの実装を使用しており、あまり洗練されていません。
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 + " ");
}
}
}
}
私の質問は次のとおりです。1つのパラメーターのみを使用する必要がある1つのメソッドのみを使用して、この問題を解決するにはどうすればよいですか? 現在、2 つの方法を実装していますが、問題を解決するために 1 つのみを実装したいと考えています。