三角递归

时间:2012-02-26 05:20:55

标签: java recursion

所以我有一个程序,其中(使用递归)我应该采用用户输入(int)并根据数字绘制一个向后和向前的三角形... ex下面

用户输入:4 (忽略每个中间的额外空格,中间不应有额外的线)结果:

XXXX 
XXX
XX
X
X
XX
XXX
XXXX

我创建了一种方法,我认为应该这样做,但我遇到了问题

这是我到目前为止的代码

n是输入数字 z是一个尝试在进行向后/向前三角形之间的计数器

    public static String drawLine(int n, int z){

            if(n!=0&& z<(n+1)){
                for(int i=1;i<=n;i++)
                    System.out.print("X");
                System.out.println();
                z+=1;
                drawLine(n-1,z);

                return"";
            } 
            else{
            if( z==(2*n+1) ) return "";
            z+=1;
            String p = drawLine(n - 1,z);
            p = p + "X";
            System.out.println(p);


           return p;    }

            }

错误信息是有一些无限循环或过流,但我找不到错误....请帮助!!

2 个答案:

答案 0 :(得分:2)

试试这个,这是一个更简单的选择:

public static void drawLine(int n) {
    if (n > 0) {
        printChar('X', n);
        drawLine(n - 1);
        printChar('X', n);
    }
}

public static void printChar(char c, int n) {
    for (int i = 0; i < n; i++)
        System.out.print(c);
    System.out.println();
}

请注意,递归方法只需要一个参数;让递归在到达基本案例(n <= 0)后返回时,负责打印正确数量的字符。

正如评论中所提到的,最好是在方法中返回String或打印String,但不要混用两种方法(我选择后者)。此外,为重用代码定义辅助方法是一种很好的做法,例如我的解决方案中的printChar

答案 1 :(得分:0)

这似乎是一个有问题的陈述:

n != 0

如果n = -1怎么办?你的循环将无休止地继续。尝试使用n > 0