带有奇怪请求的Java递归

时间:2013-02-25 18:24:26

标签: java recursion

我需要创建一个递归方法,它将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:问题解决了。我没有意识到递归调用行之后的行仍然会被执行,所以我认为它会做星星然后停止并且必须重新启动或者做其他事情。我只需要取出最后一行。

1 个答案:

答案 0 :(得分: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);是不必要的 - 如果删除它,它就会起作用!