如何使用递归输出指定星型图形并将两个C#函数合并为一个
C# 菱形打印双函数合并方案
核心思路
原来的两个函数分别负责打印菱形的上半段(含中间行)和下半段,本质都是计算每行的空格数、星号数后输出,再递归触发下一行打印。我们可以通过当前行到中间行的绝对值距离统一计算所有行的空格、星号数量,不需要拆分上下段逻辑,直接合并为单个函数。
注:默认输入n为奇数,和示例取值7的场景匹配
合并后的递归实现(兼容原有递归逻辑)
static void PrintRhombus(int N, int currentLine) { // 计算中间行序号 int midLine = (N + 1) / 2; // 计算当前行到中间行的距离 int gap = Math.Abs(midLine - currentLine); // 打印前置空格 for (int i = 0; i < gap; i++) { Console.Write(" "); } // 打印星号 for (int i = 0; i < N - 2 * gap; i++) { Console.Write("*"); } Console.WriteLine(); // 没打到最后一行就继续递归 if (currentLine < N) { PrintRhombus(N, currentLine + 1); } }
调用示例
输入n=7时,直接调用即可输出完整菱形:
PrintRhombus(7, 1);
可选简化:非递归版本
如果不需要递归,还可以进一步简化为单层循环实现:
static void PrintRhombus(int N) { int mid = (N + 1) / 2; for (int i = 1; i <= N; i++) { int gap = Math.Abs(mid - i); Console.WriteLine($"{new string(' ', gap)}{new string('*', N - 2 * gap)}"); } }
内容的提问来源于stack exchange,提问作者Utis
相关产品推荐
相关产品推荐

