递归实现printStar方法求助:n=4时无法输出指定多行星形图案
解决递归打印星号图案的问题
我来帮你搞定这个递归打印星号的需求!你当前的代码只能输出单行星号,是因为它只聚焦于一行内的星号递归输出,没处理多行的逻辑,也没覆盖从1递增回n的部分。咱们一步步来调整:
核心思路分析
要实现目标图案,递归需要完成两个阶段:
- 从n递减到1打印每行星号
- 从1递增回n打印每行星号
递归的关键逻辑是:先打印当前n颗星的行,然后递归处理n-1的情况(完成递减部分),等递归返回后,再打印一次当前n颗星的行(完成递增部分)。
完整实现代码
public class Stars { public static void main(String[] args) { printStar(4); } // 主递归方法,负责控制多行打印的逻辑 public static void printStar(int n) { // 第一阶段:打印当前n颗星的行 printSingleStarLine(n); // 递归终止条件:只有当n>1时,才继续递归处理更小的数值 if (n > 1) { printStar(n - 1); // 第二阶段:递归返回后,再次打印当前n颗星的行(实现递增效果) printSingleStarLine(n); } } // 辅助方法:专门负责打印一行n颗星并换行 private static void printSingleStarLine(int count) { if (count == 0) { System.out.println(); // 星号打印完后换行 } else { System.out.print("*"); printSingleStarLine(count - 1); } } }
代码运行逻辑(以n=4为例)
- 调用
printStar(4)→ 打印****,然后递归调用printStar(3) - 调用
printStar(3)→ 打印***,然后递归调用printStar(2) - 调用
printStar(2)→ 打印**,然后递归调用printStar(1) - 调用
printStar(1)→ 打印*,因n不大于1,递归终止,方法返回 - 回到
printStar(2),递归返回后打印** - 回到
printStar(3),递归返回后打印*** - 回到
printStar(4),递归返回后打印****
最终输出完全符合你的要求:
**** *** ** * * ** *** ****
内容的提问来源于stack exchange,提问作者Alan Navai
相关产品推荐
相关产品推荐

