跳到主要内容

go 语言实践:欧几里得算法-求最大公约数

· 阅读需 2 分钟
一介布衣
全栈开发者

  • 文章目录

    • go语言实现欧几里得算法
      • 求2个数的最大公约数
  • go语言实现欧几里得算法

求2个数的最大公约数

辗转相除法

  • 大数对小数求余

  • 余数不为零时,小数对余数求余

  • 余数为零时,小数就是俩个数的最大公约数

    package main

    import "fmt"

    func divisor(min, max int) (maxDivisor int) { //用大数对小数取余 complement := max % min //余数不为零,小数作为大数,将余数作为小数,大数对小数递归求余 if complement != 0 { maxDivisor = divisor(complement, min) } else { //当余数为零,小数就是最大公约数 maxDivisor = min } return } func main() { fmt.Println(divisor(64, 192)) }

结果:

64

基础语法和算法题最怕只记结论,不记适用边界

像「go 语言实践:欧几里得算法-求最大公约数」这种语言基础主题,如果只留下定义或公式,过一段时间很容易重新忘掉。真正能留下来的内容,通常都要补上一个层次:它在什么场景下最有用、什么时候容易写错、如果放进真实业务代码里应该怎样验证。这样文章才不只是课堂笔记,而是以后排错或复习时还能直接拿来用。

更适合复用的记法

  • 把概念和一个最小可运行例子放在一起,避免只记住术语,忘了它在代码里长什么样。
  • 顺手补上常见误区或边界条件,比如输入规模、变量作用域、零值处理或循环终止条件。
  • 如果能说明它在真实项目里会影响什么判断,基础知识就更容易沉淀成经验。