我正在尝试编写一个方法,该方法将根据递归的高度参数打印一个具有高度的金字塔。
一个示例输出将是:
printPyramid (5);*
**
***
****
*****
****
***
**
*
当它需要开始将星星的数量减少到1时,它会向我发送堆栈溢出错误,我无法找出我的逻辑在哪里关闭。它成功地向上递增,检查迭代是否大于高度,然后开始递减,并在迭代达到零时停止递归——但我仍然得到错误。
public static void printPyramid(int height){
if(height == 0) {
return;
} else {
printPyramidRow(1, height);
}
}
public static void printPyramidRow(int it, int height) {
if(it <= 0) {
return;
} else {
printRow(it);
if (it < height) {
printPyramidRow(it + 1, height);
} else {
printPyramidRow(it - 1, height);
}
}
}
public static void printRow(int numOfStars) {
for(int i = 1; i < numOfStars + 1; i++) {
if(i == numOfStars) {
System.out.println("*");
} else {
System.out.print("*");
}
}
}
if (iteration < height) {
printTriangle(iteration + 1, height);
} else {
printTriangle(iteration - 1, height);
}
这段代码有问题。一开始iteration
小于height
,然后增加它。在达到最大值后,递减一次,但在下一个递归中再次递增。您被卡在最大值附近的递增和递减中。
你可能想改变你的if条件。