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

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

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

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

扫一扫,手机访问

本文详解 Go Tour 中“For continued”练习的执行过程,揭示 sum += sum 如何等价于乘以 2 的幂运算,并说明为何最终输出为 1024。

Go Tour 的 Flow Control 章节里,“For continued”这个练习藏着一段极简却值得细品的代码。先来看看它长什么样:

package main

import "fmt"

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

乍一看,这家伙把 for 循环的初始化语句和后置语句都省了,只留了一个条件判断,活脱脱一个 while 循环的 Go 风格写法。如果把它改写得更直观,其实就是:

sum := 1
for sum < 1000 {
    sum += sum  // 等价于 sum = sum * 2
}

每次循环,sum 都会翻倍。来,一步步拆开看:

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

所以这个循环实际在干什么?它是在找“不小于 1000 的最小 2 的幂”,也就是 2^10 = 1024。这里有一个容易混淆的细节:循环在 sum 首次 ≥ 1000 时立刻退出,因此结果不是“最接近 1000 的那个数”,而是“第一次超过或等于 1000 的 2 的幂”

顺便说几个实用要点:

  • sum += sumsum *= 2 本质相同,但前者更强调“自加”的累积过程,教学场景里用来理解变量如何一点一点翻倍非常直观;
  • 如果对迭代次数有严格把控,还是建议用显式的 for i := 0; i < n; i++ 这种写法;
  • 这种“纯条件型 for”在需要根据状态驱动循环的场景里特别顺手,比如读取流数据、轮询某个状态变量等,省掉了不必要的初始化和后置步骤。

理解了这种无初始化/后置语句的 for 写法,就等于摸到了 Go 控制流简洁性的一个关键切面——它让你能用最少的关键字,表达最灵活的逻辑。

本文转载于:https://www.php.cn/faq/2342812.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注