所以我在这里有一颗钻石。我现在必须以递归的方式做到这一点。我只是一个初学者,并向你寻求帮助。递归方法对我来说有点困难。
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;
}
}
}
答案 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循环。添加其他参数,以确定何时结束递归以及何时减少要打印的值。