商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Go Tour 练习解析:理解 for 循环中的幂次增长逻辑

Go Tour 练习解析:理解 for 循环中的幂次增长逻辑

  发布于2026-07-18 阅读(0)

扫一扫,手机访问

Go Tour 的 Flow Control 章节里,有一个叫“For continued”的小练习,代码短得可怜,但背后藏着不少值得琢磨的细节。咱们先看看这段代码到底在干什么,以及它为什么能输出 1024。

Go Tour 练习解析:理解 for 循环中的幂次增长逻辑

直接上代码:

package main

import "fmt"

func main() {
    sum := 1
    for ; sum < 1000; {
        sum += sum
    }
    fmt.Println(sum)
}

这个 for 循环省略了初始化语句和后置语句,只保留了条件判断 sum < 1000,看起来很像其他语言里的 while 循环。Go 对 C 风格的 for 做了精简,三个部分都可以省略,这是其中之一。

循环体里只有一句 sum += sum。换句话说,每次循环都把 sum 翻倍。等价于 sum = sum * 2。所以 sum 不是线性增长,而是指数级翻倍:

  • 初始值:sum = 1
  • 第1次循环:sum = 1 + 1 = 2
  • 第2次:sum = 2 + 2 = 4
  • 第3次:sum = 4 + 4 = 8
  • 第4次:sum = 8 + 8 = 16
  • ……
  • 第9次后:sum = 512,此时 512 < 1000 成立,继续循环
  • 第10次:sum = 512 + 512 = 1024,此时 1024 < 1000 不成立,循环终止
  • 最终输出:1024

需要特别注意的是,循环条件是在每次迭代开始前检查的。所以当 sum 变成 1024 后,不会再进入循环体,而是直接退出并打印结果。这也解释了为什么最终输出是 1024 而不是 2048。

整个过程中没有用到 i++ 或传统计数器,却清晰地展示了 Go 对 C 风格 for 的精简支持。三个部分均可省略,比如 for { } 就是无限循环。这种写法让开发者更专注于逻辑本身,而不是循环的机械结构。

总结一下核心点:

  • sum += sum 的本质是 2 的幂增长,每次翻倍;
  • 循环终止于第一个不满足 sum < 1000 的值,即 2^10 = 1024;
  • 理解这个例子,有助于掌握 Go 中无初始化、无后置语句的 for 用法,也为后续学习 range、break/continue 以及循环嵌套打下基础。
本文转载于:https://www.php.cn/faq/2342934.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注