我们正在try 使用Java创建一个星三角形,但限制是您不能使用任何循环、额外方法、添加额外参数、添加额外变量,甚至不能使用字符串方法.解决方案似乎很直接,在到达底部后,您就从n-1开始新的回归,但问题是我们不允许使用额外的变量.解决方案有可能吗?如果没有,使用额外变量的限制可能会出现错误,尽管仍应考虑其他变量. 基本代码将n颗星打印在一条线上,目标是使其创建一个三角形(无论它从n还是1开始,尽管两者都值得赞赏)

n = 4时的预期输出:

****
***
**
*

*
**
***
****

当前代码如下:

public class Test {

    public static void main(String[] args) {
        recurse(3);
    }

    public static void recurse(int x) {
        if (x == 0){
            System.out.println();
            return;
        }
        
        System.out.print("*");
        recurse(x-1);
    }
}

推荐答案

一种方法是使用negative x表示"打印* -x次",使用正x表示"打印大小为x的三角形".

public static void recurse(int x) {
    if (x == 0){
        return; // base case for both negative and positive numbers
    }
    if (x < 0) { // we should print -x "*"s
        System.out.print("*");
        recurse(x + 1); // i.e. -(-x - 1), one less "*"
        return;
    }
    // to reach this point, x must be positive

    // to print a triangle of size x...
    recurse(-x); // first print x stars...
    System.out.println(); // a new line...
    recurse(x - 1); // then print a smaller triangle
}

Java相关问答推荐

Java 8 RDX-如何设置单个选项卡标题文本的 colored颜色

如何让TaskView总是添加特定的列来进行排序?

表格栏上的事件过滤器在PFA中不起作用

我可以在regex中的字符类中放置断言吗?

如何在访问完所有文件后加入所有线程?

如果一个子类没有构造函数,超类也没有构造函数,那么为什么我可以构造子类的实例呢?

Java函数式编程中的双值单值映射

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

存根基类的受保护方法

Spring Boot Maven包

JavaFX如何在MeshView中修复多个立方体?

如何仅使用键/ID的一部分(组合)高效地返回映射值?

允许同时执行两个方法,但不能同时执行这两个方法

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

如何使这两种方法合二为一?

如何在SWT菜单项文本中保留@字符

Java.time.OffsetDateTime的SQL Server数据库列类型是什么?

如何制作回文程序?

如何设置默认序列生成器分配大小

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题