0

我需要创建一个递归方法,它将 int x 作为其唯一参数,然后打印“*”x 次,然后打印“!” x 次。通常这很容易,但我们不能使用任何循环或除 x 之外的任何变量。

我尝试过的(编辑):

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

我想让递归重新开始,但我不知道如何。

编辑2:问题已解决。我没有意识到递归调用行之后的行仍然会被执行,所以我认为它会做星星然后停止并且必须再次重新启动或做其他事情。我只需要取出最后一行。

4

1 回答 1

1

尝试这个:

public void xPrint(int x) {
    if (x > 0) {
        System.out.print("*");
        xPrint(x-1);
        System.out.print("!");
    }
}

以下是它的工作原理:

  • 如果x > 0,那么我们打印一个*并调用递减x一个单位的递归
  • 如果x <= 0,则意味着我们必须停止并开始返回
  • 每次递归返回时,!都会打印一个
  • 它一直这样下去,直到没有任何要返回的递归调用,此时方法调用结束

请注意,问题中的代码几乎是正确的。唯一的问题是最后一次调用xPrint(x-1);是不必要的 - 如果你删除它,它会起作用!

于 2013-02-25T18:43:49.603 回答