三角递归Java

时间:2014-02-13 00:27:17

标签: java recursion geometry

在命令行中取两个数字m和n,并写出一个星号的三角形图案

public class Triangle {

public static void main(String[] args) {
    int a=0;
    int b=0;
    if(args.length!=0){
        a=Integer.parseInt(args[0]);
        b=Integer.parseInt(args[1]);
    }
    printFirstHalf(a,b);
    printSecondHalf(a,b);
}

public static void printFirstHalf(int m, int n){

    if(m==0){
        return;
    }

    //recursive step
    for(int i=m; i<=n; i++){
        System.out.print("*");
    }
    System.out.println();
    printFirstHalf(m-1,n);


}

public static void printSecondHalf(int m, int n){
    if(m==0){
        return;
    }
    printSecondHalf(m-1,n);

    //recursive step
    for(int i=m; i<=n; i++){
        System.out.print("*");
    }
    System.out.println();


}
}

如果发送3和7,则应打印:

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

现在打印出来:

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

我知道我很接近,但由于某种原因,我受到了严重的困扰。

2 个答案:

答案 0 :(得分:0)

考虑一下:

public static void printFirstHalf(int m, int n){
    if(m>n){
        return;
    }

    // print asterix
    for(int i=1; i<=m; i++){
        System.out.print("*");
    }
    System.out.println();

    // recurse
    printFirstHalf(m+1,n);
}

你现在看到你的其他方法出了什么问题吗?

如果您是第一次使用递归,我知道它可能很难,但递归没有“魔力”。逐步完成代码并了解它的作用。在这种情况下,您实际上并没有打印所需的星号数。坚持下去。

答案 1 :(得分:0)

你的上半部分可能是这样的(增量逻辑&gt;:

public static void printFirstHalf(int m, int n){

    if(m>n){
        return;
    }

    //recursive step
    for(int i=1; i<=m; i++){
        System.out.print("*");
    }
    System.out.println();
    printFirstHalf(m+1,n);

}

建议你为下半部写下类似的递减逻辑