0

本を読んだり演習を行ったりして、独学で 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 つのみを実装したいと考えています。

4

3 に答える 3

1

私はあなたと同じ本を読んでいて、これにたどり着いたのかもしれません。ある方法ではできませんでしたが、とにかくコードを投稿して別の方法を示すと思いました.

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;
    }
}
于 2013-03-18T04:35:25.977 に答える
1

引数が 1 つの再帰メソッドを 1 つだけ記述する方法についてのヒントを次に示します。

再帰メソッドで再帰呼び出しの前後に番号を出力します。

于 2013-02-12T00:31:38.970 に答える