处理递归方法

时间:2015-11-15 01:39:24

标签: java recursion methods numeric

所以我在这里有一颗钻石。我现在必须以递归的方式做到这一点。我只是一个初学者,并向你寻求帮助。递归方法对我来说有点困难。

    1
   222
  33333
 4444444
555555555
 4444444
  33333
   222
    1

我使用的代码:没有递归:

 public static void main(String[] args) {
    drawNumDiamond(9);

}
public static void drawNumDiamond(int h) {
    int noofColumns= 1;
    int noofSpaces = 4;
    int start=0;
    for (int i = 1; i <= h; i++) {
        if (i<5) {
            start=i;
        } else {
            start=10-i;
        }

        for (int j = 1; j <= noofSpaces; j++) {
            System.out.print(" ");

        }
        for (int j = 1; j <= noofColumns; j++) {
            System.out.print(start);

        }
        System.out.println();
        if (i < 5) {
            noofColumns = noofColumns+2;
            noofSpaces = noofSpaces-1;
        } else {
            noofColumns = noofColumns-2;
            noofSpaces = noofSpaces + 1;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我将简化打印钻石的迭代方式,以便它可以轻松扩展到递归功能。
迭代:

public static void diamond(int n){

    boolean increase = true;
    int val = 1;
    while(val > 0){
        spaces(n-val);
        printValue(2*val-1,val);
        if(val >= n) increase = false;
        if(increase) val++;
        else val--;
    }
}

private static void printValue(int times, int val) {
    for (int i = 0; i < times; i++) {
        System.out.print(val);
    }
    System.out.println();

}

private static void spaces(int times) {
    for (int i = 0; i < times; i++) {
        System.out.print(" ");
    }

}


尝试在内部调用菱形方法并删除while循环。添加其他参数,以确定何时结束递归以及何时减少要打印的值。