我刚刚开始通过阅读书籍和完成练习来自学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 + " ");
}
}
}
}
我的问题是:如何仅使用一种只能采用一个参数的方法来解决此问题?现在,我正在实现两种方法,但我只想实现一种方法来解决问题。
最佳答案
这里提示了如何仅编写一个带有一个参数的递归方法。
在递归方法中的递归调用之前和之后打印您的号码。
关于java - 使用递归打印先倒数再向上的对称整数序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823511/