
本文详解如何用 go 语言分别使用一个和两个 for 循环打印 25 行递增的 'g' 字符图案(第1行1个g,第2行2个g……第25行25个g),重点优化双循环写法,避免字符串拼接开销,提升可读性与性能。
本文详解如何用 go 语言分别使用一个和两个 for 循环打印 25 行递增的 'g' 字符图案(第1行1个g,第2行2个g……第25行25个g),重点优化双循环写法,避免字符串拼接开销,提升可读性与性能。
在 Go 编程练习中,打印规律性字符图案是掌握循环控制结构的经典任务。核心目标是输出如下格式的 25 行图案:
G GG GGG GGGG ... GGGG...G // 共25个G
✅ 推荐的双 for 循环实现(清晰、高效、无副作用)
最自然、符合直觉的双循环解法是:外层循环控制行号(0 到 24),内层循环控制每行打印的 'G' 个数。第 i 行(从 0 开始)应打印 i+1 个 'G',因此内层循环条件设为 j (或更惯用的 j ):
func manyG2() {
for i := 0; i <p>该写法优势显著:</p>
-
零字符串拼接:避免
counter += "G"引发的重复内存分配与拷贝,时间复杂度稳定为 O(n²); -
逻辑直观:
i表示行索引,j表示当前行内字符位置,语义清晰; - 空间高效:仅使用常量级额外内存。
⚠️ 注意:原问题中嵌套循环
for x := 0; x == 0; x++实际是“伪循环”——仅执行一次,完全违背双循环设计初衷,既低效又难以维护,应严格避免。
✅ 单 for 循环实现(简洁但需巧用字符串构造)
若限制仅用一个 for 循环,推荐借助 Go 标准库的 strings.Repeat() 函数,直接生成每行所需字符串:
strings.Repeat
- 双循环的核心在于内外层职责分离:外层管“行”,内层管“列”;
- 避免在循环中反复拼接字符串(尤其是长字符串),Go 中
+=对字符串是 O(n) 操作; - 单循环方案优先考虑标准库工具(如
strings.Repeat),而非手动构建; - 所有循环边界建议统一采用
i 形式(左闭右开),符合 Go 社区惯例,减少越界风险。
通过这两种实现,你不仅能完成练习要求,更能深入理解循环抽象与 Go 字符串处理的最佳实践。










