递归打印星号图案出现重复输出问题排查
递归打印星号图案重复输出的问题排查与修复
问题原因
你的递归逻辑存在重复触发打印的问题:在printRecursion2方法中,无论当前行的星号是否打印完成,每次递归调用返回后,都会执行System.out.println()和printRecursion2(row - 1, i)。也就是说,在打印一行星号的过程中(i从1到row的每一次递归),每一次递归返回时都会触发一次换行和对row-1的递归,导致同一行被多次重复打印,最终出现大量冗余图案。
修复后的代码
调整逻辑,仅当当前行的星号全部打印完毕时,才执行换行并递归打印上一行:
public static void printRecursion(int row) { int i = 1; printRecursion2(row, i); } private static void printRecursion2(int row, int i) { if (row <= 0) { return; } if (i <= row) { System.out.print("* "); i++; printRecursion2(row, i); } else { // 仅当前行星号打印完成后,才换行并递归打印下一行 System.out.println(); printRecursion2(row - 1, 1); } }
修复说明
- 将原本在
if(i<=row)分支外的换行和递归逻辑,移至else分支内,确保只有当当前行所有星号打印完毕(i > row)时,才触发换行和对row-1的递归调用。 - 这一修改避免了每次i递增的递归返回后重复触发下一行打印,保证每一行只被打印一次,最终得到预期的递减星号图案。
内容的提问来源于stack exchange,提问作者Aman Ahmed
相关产品推荐
相关产品推荐

