无限递归 - Sytax - printStars(第1行);

时间:2016-10-21 05:21:00

标签: java recursion data-structures

我已经获得了一个赋值输出如下:with in recursion。

****
***
**
*
**
***
****

我的问题是我不能使用任何循环,必须使用printStars(行)的一个递归参数严格编译代码。

这是我的代码:

public static void printStars(int lines) {
    if (lines==1) { //base case
        System.out.print("*");
    }else if (lines>1){ //recursive case
        printStars(lines-1);
        System.out.print("*");

但是,输出只是打印:

Please enter a number: 4
****BUILD SUCCESSFUL (total time: 2 seconds)

我可以使用for循环完美地工作,但是,这个循环的限制我需要只在递归中工作。我已经阅读了将for循环更改为递归的方法,但我仍然感到困惑。任何帮助或想法?

谢谢,

1 个答案:

答案 0 :(得分:0)

在当前代码中,您调用printStars(4)。调用它时,代码递归调用printStars(3),printStars(2),然后调用printStars(1)。

第一个*来自printStars(1)。当返回时,第二个*在递归调用后由printStars(2)打印。第三个*在递归调用后打印在printStars(3)中,第四个*在printStars(4)中递归调用后打印。

考虑问题,并查看您要查找的输出的形状。模式是4,3,2,1,2,3,4,初始输入为4.这看起来像你需要遵循这样的模式:

public static void printStars(int lines) {
    if (lines ==1) {
        System.out.print("*");
    }
    else {
        // Do something before recursion
        // Recurse
        // Do something after recursion
    }
}

对于您的输出,您应该看到这种情况发生:

**** //printed when lines==4
***  //printed when lines==3
**   //printed when lines==2
*    //printed when lines==1
**   //printed when lines==2
***  //printed when lines==3
**** //printed when lines==4